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

如何按组从末行到首行计算cumsum(累积和)

按分组从后向前计算val列累积和的R实现

嘿,我来帮你搞定这个按var分组、从数据框最后一行往前算val列累积和的需求!咱们一步步来:

首先看示例数据

先把你给出的示例数据用R代码定义出来:

t1 <- data.frame(var = "a", val = c(0,0,0,0,1,0,0,0,0,1,0,0,0,0,0))
t2 <- data.frame(var = "b", val = c(0,0,0,0,1,0,0,1,0,0,0,0,0,0,0))
ts <- rbind(t1, t2)

实现思路

要实现从后往前的累积和,其实可以换个巧妙的思路:把每个分组的val列先倒序排列,用常规的cumsum()计算累积和,再把结果倒序回来——这样就相当于从原数据的最后一行开始往前累积啦!

用dplyr包实现(推荐)

如果你习惯用tidyverse系列的工具,用dplyr的分组操作非常直观,而且能直接得到和你期望完全一致的数据框:

library(dplyr)

# 按var分组,直接更新val列为从后往前的累积和
result <- ts %>%
  group_by(var) %>%
  mutate(val = rev(cumsum(rev(val)))) %>%
  ungroup()

运行这段代码后,result就是你想要的最终结果,和你给出的示例完全匹配~

用Base R实现(无需额外包)

如果你不想加载第三方包,用Base R的by()函数也能轻松实现:

# 按var分组处理val列,计算从后往前的累积和
updated_val <- unlist(by(ts$val, ts$var, function(x) rev(cumsum(rev(x)))))
# 替换原数据框的val列
ts$val <- updated_val

这样处理后,原ts数据框就变成了你期望的格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:30:25