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

使用cumsum结合mutate生成累计列异常,寻求解决方法

问题原因

你用group_by(count)后,cumsum(count)会在每个count值相同的分组内单独计算累计,而非按时间顺序做全局累加。比如:

  • count=1的行(前6年)会被分到一组,累计到6;
  • count=2的行(2016、2021、2022年)单独成组,累计结果是2、2、4;
  • count=3的行(2017-2019、2023年)单独成组,累计结果是3、6、9、3;
    这就导致你看到的“累计停止”和2023年结果异常的情况。

正确解决方法

你的需求是按时间顺序做全局累计,不需要分组,直接用mutate结合cumsum即可:

1. 单列实现

dat <- dat %>% mutate(CulmCount2 = cumsum(count))

运行后CulmCount2会和你用dat[,"CulmCount1"]<-cumsum(dat$count)得到的结果完全一致。

2. 多列批量处理(across实现)

如果有多个需要累计的列(比如count1、count2),用across批量处理,自定义新列名:

# 假设数据有count1、count2列,批量生成累计列
dat <- dat %>% 
  mutate(across(
    c(count1, count2),  # 指定要处理的列
    cumsum,             # 应用累计函数
    .names = "Culm_{.col}"  # 新列名格式:Culm_原列名
  ))

也可以用列名匹配规则简化,比如处理所有以count开头的列:

dat <- dat %>% 
  mutate(across(
    starts_with("count"), 
    cumsum, 
    .names = "Culm_{.col}"
  ))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 13:30:14