r - 在 R 中的 cumsum 函数中生成最小值

标签 r tidyverse cumsum

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.acctmean.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/

相关文章:

python - pandas 在列上使用 cumsum 但重置计数

在 data.table 中滚动 cumsum

r - cumsum NAs 和其他条件 R

r - 带有 Gamma 分布的fitdist中的错误

r - MLR - 使用嵌套重采样的基准实验。如何获取内部重采样调整结果?

r - 如何从 R 脚本通过电子邮件发送自己的数据?

r - 如何使用 gt() 为每个其他类别着色?

r - 使用 R 中的 ggplot 将数据分组为多个季节和箱线图?

python - 是否有提供有关数据框的实用信息的功能?

r - Lintr - 有没有办法抑制大写数据框列名称警告?