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

R语言按分组逐行计算hs^seq*th累积求和的实现方法

R语言按分组计算组内累计累加值实现方案

需求说明

现有数据集需要按group字段分组,对每行计算从组内首行到当前行的指定规则累加值,生成新列an。
计算规则:每行an值为同组内从第一行到当前行,所有行的hs的seq次方乘以th的结果之和。

示例数据构造

demo<-data.frame(th=c(c(0,24,26),(c(0,1,2,4))),hs=c(rep(220,3),c(rep(240,4))),
    seq=(c(1:3,1:4)),group=c(rep(1,3),rep(2,4)))

原始数据集预览:

> demo
  th  hs seq group
1  0 220   1     1
2 24 220   2     1
3 26 220   3     1
4  0 240   1     2
5  1 240   2     2
6  2 240   3     2
7  4 240   4     2

计算逻辑说明

# 单条计算示例
demo[1,"an"]<-    demo[1,"hs"]^demo[1,"seq"] * demo[1,"th"]
demo[2,"an"]<-sum(demo[1,"hs"]^demo[1,"seq"] * demo[1,"th"],
                                     demo[2,"hs"]^demo[2,"seq"] * demo[2,"th"] )
demo[3,"an"]<-sum(demo[1,"hs"]^demo[1,"seq"] * demo[1,"th"],
                                     demo[2,"hs"]^demo[2,"seq"] * demo[2,"th"],
                                        demo[3,"hs"]^demo[3,"seq"] * demo[3,"th"])

实现代码

方法1:dplyr包实现(推荐,代码简洁易读)

library(dplyr)
demo <- demo %>%
  group_by(group) %>%
  # 先计算每行的单个项,再做累计求和
  mutate(an = cumsum(hs^seq * th)) %>%
  ungroup()

方法2:基础R实现(无需加载额外包)

demo$an <- ave(demo$hs^demo$seq * demo$th, demo$group, FUN = cumsum)

最终输出结果(已补全所有NA值)

> demo
  th  hs seq group         an
1  0 220   1     1          0
2 24 220   2     1    1161600
3 26 220   3     1  278009600
4  0 240   1     2          0
5  1 240   2     2      57600
6  2 240   3     2   27705600
7  4 240   4     2 13298745600

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 06:30:05