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

R语言按实体逐年计算Cumulative sum(累积求和)的实现方法

解决按ID跨年度累积求和的问题

问题分析

你需要为每个id计算跨年度的累积求和,但当前代码通过group_by(id, year)仅实现了年度内的累积,无法跨年度累加。正确的思路是先汇总每个id每年的总数,再基于年度汇总结果做跨年度累积。

解决方案代码

library(tidyverse)

# 示例数据集
data <- data.frame(id=c("a","a","a","b","a","b","b"),cars=c(1,1,1,1,1,1,1),year=c(2001,2001,2002,2003,2003,2003,2004))

# 实现跨年度累积求和
data %>%
  # 1. 汇总每个id每年的cars总数
  group_by(id, year) %>%
  summarise(year_total = sum(cars), .groups = "drop_last") %>%
  # 2. 按id计算跨年度累积求和
  mutate(csum = cumsum(year_total)) %>%
  # 3. 调整列名和顺序匹配预期结果
  select(id, cars = year_total, year, csum)

代码说明

  • 汇总年度总数:通过group_by(id, year)和summarise,将每个id同一年的多条记录合并为年度总数(比如a在2001年的2条1汇总为2)。
  • 跨年度累积:此时分组仅保留id,cumsum(year_total)会对每个id的年度总数逐年累加,实现跨年度累积效果。
  • 调整列结构:用select将year_total重命名为cars,并调整列顺序,与你期望的输出格式一致。

输出结果

运行代码后会得到如下结果:

# A tibble: 5 × 4
# Groups:   id [2]
  id    cars  year  csum
  <chr> <dbl> <dbl> <dbl>
1 a         2  2001     2
2 a         1  2002     3
3 a         1  2003     4
4 b         2  2003     2
5 b         1  2004     3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 04:46:12