R语言按主体分组计算每一期对应前期数值累计和的实现方法
R实现分组前期累计和的简便方法
你可以直接使用dplyr的窗口函数实现需求,无需编写循环:
方法1:dplyr实现(推荐)
library(dplyr) df_result <- df %>% # 按受试者分组 group_by(Subject) %>% # 分组内按时序排序,避免数据顺序错乱 arrange(Period, .by_group = TRUE) %>% # 计算前期累计和:先算全量累计和,再后移一位即可排除当期值 mutate(sum_values = lag(cumsum(Values), default = 0)) %>% ungroup()
结果验证
运行后得到的结果如下,完全符合你的计算要求:
# A tibble: 9 × 4 Period Subject Values sum_values <dbl> <dbl> <dbl> <dbl> 1 1 1 4.37 0 2 2 1 6.6 4.37 3 3 1 5.49 10.97 4 1 2 5.18 0 5 2 2 5.33 5.18 6 3 2 5.74 10.51 7 1 3 4.16 0 8 2 3 4.18 4.16 9 3 3 5.58 8.34
如果需要第一期的sum_values显示为NA而非0,删除lag()函数里的default = 0参数即可。
方法2:Base R实现
如果你不想加载额外包,也可以用基础R的ave()函数实现:
df$sum_values <- ave(df$Values, df$Subject, FUN = function(x) { c(0, cumsum(x)[-length(x)]) })
内容的提问来源于stack exchange,提问作者Lin Jing
相关产品推荐
相关产品推荐

