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

如何在R中按ID分组求和生成df$TOTAL_VOLUME变量

解决方法

你可以用两种常用方式实现按ID分组求和并生成新列的需求:

1. 使用Base R的ave()函数

无需加载额外包,直接用base R内置的ave()函数即可完成,它会为每个分组重复填充计算后的总和:

首先构造示例测试数据(和你提供的表一致):

df <- data.frame(
  ID = c("A_001", "A_001", "A_001", "A_001", "B_002", "B_002", "C_003", "C_003", "C_003"),
  DATE = as.Date(c("2018-11-26", "2018-11-26", "2020-08-01", "2020-08-01", "2022-05-23", "2022-05-23", "2015-03-11", "2023-12-06", "2023-12-06")),
  AMOUNT = c(0.5, 0.5, 1.5, 1.5, 0.5, 0.5, 1.5, 0.5, 0.5)
)

生成TOTAL_VOLUME列:

df$TOTAL_VOLUME <- ave(df$AMOUNT, df$ID, FUN = sum)

2. 使用tidyverse/dplyr包(更直观的分组语法)

如果你习惯tidyverse风格的代码,可以用dplyr的分组+突变操作:

先安装并加载包(未安装时先运行install.packages("tidyverse")):

library(dplyr)

df <- df %>%
  group_by(ID) %>%
  mutate(TOTAL_VOLUME = sum(AMOUNT)) %>%
  ungroup() # 取消分组,避免后续操作受分组状态影响

最终结果

运行任意一种方法后,数据框会呈现你期望的效果:

IDDATEAMOUNTTOTAL_VOLUME
A_0012018-11-260.54.0
A_0012018-11-260.54.0
A_0012020-08-011.54.0
A_0012020-08-011.54.0
B_0022022-05-230.51.0
B_0022022-05-230.51.0
C_0032015-03-111.52.5
C_0032023-12-060.52.5
C_0032023-12-060.52.5

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 19:57:37