You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按ID与Rep分组、按Age时序计算婴儿数累积和?

解决方法

你的问题出在ave函数的分组参数上,你错误地把id、age重复组合作为分组依据,正确的分组应该是id + rep的组合,同时要确保每个分组内的行是按age升序排列的(否则累积和会乱序)。

以下是两种可行的解决方案:

方法1:Base R 实现

先按id、rep、age排序,再用ave按id和rep分组计算累积和:

id <- c("A","A","A","A","A","A","B","B","B","B","B","B","B","B","B")
rep <- c(1,1,1,2,2,2,1,1,1,1,2,2,2,2,2)
age <- c(0,1,2,0,1,2,0,1,2,3,0,1,2,3,4)
babies <- c(1,2,3,0,1,3,0,1,5,1,0,0,12,1,1)

df <- data.frame(id, rep, age, babies)

# 先按id、rep、age排序,保证累积和的顺序正确
df <- df[order(df$id, df$rep, df$age), ]
# 按id和rep分组计算累积和
df$csum <- ave(df$babies, list(df$id, df$rep), FUN = cumsum)

运行后你会看到A1组的csum是1、3、6,符合预期。

方法2:dplyr 实现(更直观)

如果你习惯用tidyverse工具,用dplyr的分组和突变函数会更清晰:

library(dplyr)

df <- df %>%
  arrange(id, rep, age) %>%  # 确保每组内age升序
  group_by(id, rep) %>%      # 按id和rep分组
  mutate(csum = cumsum(babies)) %>%  # 计算累积和
  ungroup()  # 取消分组(可选,根据后续操作需求)

这种方法代码可读性更强,分组逻辑一目了然。

验证结果

以A1组为例,babies值是1、2、3,累积和为1、1+2=3、3+3=6,完全符合你的要求。

内容的提问来源于stack exchange,提问作者Rspacer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 09:25:26