You need to enable JavaScript to run this app. R语言按主体分组计算每一期对应前期数值累计和的实现方法
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 23:15:07