如何在R中生成按标识分组的时间累计金额列?
在R中实现分组时间累计金额计算
要在R里实现按identifier分组的时间累计金额,有两种常用方案,下面一步步说明:
方案一:用dplyr包(推荐,可读性强)
这是tidyverse生态里的工具,操作逻辑和Excel的思路对应,很容易理解。
1. 准备数据(模拟你的示例)
df <- data.frame( identifier = c("aaa", "aaa", "aaa", "bbb", "bbb", "bbb", "bbb"), date = c("01", "02", "03", "01", "02", "03", "04"), amount = c(5, 6, 8, 5, 4, 0, 11) )
2. 安装并加载dplyr
如果是第一次用,先安装包:
install.packages("dplyr")
然后加载:
library(dplyr)
3. 计算分组累计和
用group_by()指定分组变量,mutate()新增列,cumsum()计算累计值:
df <- df %>% group_by(identifier) %>% # 确保数据按日期排序(如果你的原始数据已经有序,这步可省略) arrange(date) %>% mutate(cumulative_amount = cumsum(amount)) %>% ungroup()
执行后查看结果,就会得到你需要的cumulative_amount列,和示例完全一致。
方案二:基础R的ave函数(无需额外包)
如果不想加载第三方包,用基础R的ave()函数也能实现:
# 先确保数据按identifier和date排序(如果原始数据无序) df <- df[order(df$identifier, df$date), ] # 计算累计金额 df$cumulative_amount <- ave(df$amount, df$identifier, FUN = cumsum)
关键注意点
- 无论用哪种方法,必须保证每个分组内的date是按时间顺序排列的,否则累计和会出错。如果原始数据无序,一定要先排序。
内容的提问来源于stack exchange,提问作者xrm4
相关产品推荐
相关产品推荐

