R 函数计算多个条件下的累积和

R 函数计算多个条件下的累积和,r,dplyr,data.table,tidyverse,cumsum,R,Dplyr,Data.table,Tidyverse,Cumsum,我有一个数据框,如下所示: set.seed(123) df <- data.frame(loc.id = rep(1:10, each = 101*10), year = rep(rep(2001:2010, each = 101), times = 10), day = rep(rep(250:350, times = 10), times = 10), ref.rain = rep(c(400,500,4

我有一个数据框,如下所示:

set.seed(123)
df <- data.frame(loc.id = rep(1:10, each = 101*10), 
             year = rep(rep(2001:2010, each = 101), times = 10),
             day = rep(rep(250:350, times = 10), times = 10),
             ref.rain = rep(c(400,500,450,430,470,576,644,230,850,690), each = 10*101),
             rain = runif(min = 0, max = 20, 10*101*10))
我的问题是,我希望
My.fun
足够灵活,以便我可以计算任何百分比降雨量(1%、2%、3%、50%)的天数。目前,如果我想计算更多的百分比,我必须添加一个额外的
rain.XX=ref.rain*XX
参数,然后添加一个额外的
days2rainXX=my.fun(rain,rain.XX
)参数。如何编写函数,使其采用百分比向量并生成结果。

库(dplyr)
library(dplyr)
# Create vector of percents
pct <- seq(0.01, 0.05, 0.01)
# Create reference rainfall columns 
df[paste0('rain', pct)] <- lapply(pct, `*`, df$ref.rain)
# summarise at new columns, with grouping
df %>% 
    group_by(loc.id, year) %>%  
    summarise_at(paste0('rain', pct), my.fun, x = as.name('rain'))
#创建百分比向量 百分比 总结于(paste0('rain',pct),my.fun,x=as.name('rain'))
我不确定这是否更快或更清晰,但您的功能也可能更清晰

myfun <- function(x, y) which(cumsum(x) >= y)[1]
myfun=y[1]
myfun <- function(x, y) which(cumsum(x) >= y)[1]