gpt4 book ai didi

r - 获取达到所需数量所需的天数

转载 作者:行者123 更新时间:2023-12-05 01:04:43 25 4
gpt4 key购买 nike

我目前有一个数据框,其中包含站点名称、降雨日期、降雨量(附示例)我有兴趣探索每个站点达到特定数量所需的天数(和/或月数)的降雨量。例如:

是否可以根据示例一的数据集获得类似上述的输出?我最初的想法是单独过滤每个站点,加入一个日历数据框,从该范围中提取最小值和最大值,计算它们之间的天数并使用 case_when 对它们进行分类。这种方法似乎有点令人费解,如果有任何关于什么是更好的方法的指导,我们将不胜感激。

感谢您的建议!

示例数据集:

Example <- structure(list(Name.Station = c("Station A", "Station A", "Station A", 
"Station A", "Station A", "Station B", "Station B", "Station B",
"Station C", "Station C", "Station C", "Station C"), Rainfall.Date = c("7/10/2020",
"8/12/2020", "8/01/2021", "25/06/2021", "26/10/2021", "7/01/2020",
"22/01/2020", "5/02/2020", "5/09/2020", "5/10/2020", "5/11/2020",
"5/12/2020"), Rainfall.Amount = c(210, 210, 208.47, 208.16, 203.67,
227.49, 225, 222.54, 250, 250, 246.18, 245.15)), class = "data.frame", row.names = c(NA,
-12L))

最佳答案

by 站可以计算出cumsum 大于mm 阈值的降雨量。然后计算seq从开始日期到cumsum中最大日期的天数的length

不过,首先,您的日期格式应该正确。

Example <- transform(Example, Rainfall.Date=as.Date(Rainfall.Date, '%d/%m/%Y'))

do.call(rbind, by(Example, Example$Name.Station, \(x) {
f <- \(mm, x.=x) {
mx <- which.max(cumsum(x.$Rainfall.Amount) > mm)
length(do.call(seq.Date, c(as.list(range(x.$Rainfall.Date[1:mx])), 1)))
}
ds <- seq.int(200, 1e3, 200) ## sequence of 200, 400, ... , 1000mm
r <- t(vapply(ds, f, 0))
data.frame(Name.Station=el(x$Name.Station), `colnames<-`(r, paste0('d_', ds)))
}))
# Name.Station d_200 d_400 d_600 d_800 d_1000
# Station A Station A 1 63 94 262 385
# Station B Station B 1 16 30 1 1
# Station C Station C 1 31 62 92 1

注意:使用 R >= 4.1。

关于r - 获取达到所需数量所需的天数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71642517/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com