set.seed(123)
dat <- data.frame(day = 1:365, rain = runif(min = 0, max = 5,365),tmean = runif(min = 15, max = 33, 365) )
dat <- dat %>% mutate(mean.daily.rain = mean(rain),mean.daily.tmean = mean(tmean)) %>%
mutate(rain.acc = rain - mean.daily.rain,tmean.acc = tmean - mean.daily.tmean)
如果我想找到一年中哪一天的累积值
rain.acc
或 tmean.acc
是我能做到的最低限度:dat %>% summarise(which.min(cumsum(rain.acc)))
329
dat %>% summarise(which.min(cumsum(tmean.acc)))
159
但是,我想施加一个条件,即我只想查看 doy >= 213 和 <= 365,即如何提取 213 和 365 之间的年份中的最低值
cumsum(rain.acc)
和 cumsum(tmean.acc)
.请注意 cumsum
必须在全年计算。
最佳答案
使用 ifelse()
将过滤器应用于可能的值
fun = function(x, i, min, max)
which.min(cumsum(x) * ifelse(i >= min & i <= max, 1, NA))
和
> fun(dat$tmean.acc, dat$day, 213, 365)
[1] 248
或者
> dat %>% summarize(
rain.min = fun(rain.acc, day, 213, 365),
tmean.min = fun(tmean.acc, day, 213, 365)
)
rain.min tmean.min
1 329 248
或者
> filter(dat, row_number() == fun(tmean.acc, day, 213, 365))
day rain tmean mean.daily.rain mean.daily.tmean rain.acc tmean.acc
1 248 4.846782 15.39589 2.4938 24.03155 2.352982 -8.635665
关于r - 在 R 中的 cumsum 函数中生成最小值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49415805/