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

如何在R语言中用data.table实现固定一端的滚动求和

用data.table一行实现逐行累加的方案

一行代码实现

直接借助R内置的cumsum()函数就能完成逐行累加,这是最简洁的实现方式,完全不需要循环:

library(data.table)
library(ggplot2)
mpg <- data.table(mpg)
mpg[, new := cumsum(displ)]

cumsum()会自动对displ列做逐行累积求和,第一行结果就是displ[1],第二行是displ[1]+displ[2],以此类推,完全符合需求。

关于循环中必须用mpg$displ的原因

在你的循环代码里,mpg[i, new := mpg$displ[i]+mpg$new[i-1]]中,如果换成直接写displ和new,会出现逻辑问题:

  • data.table在i位置指定行号后,j环境里的列名是对应当前行子集的列,而非整个数据表的列。
  • 比如写displ时,它等价于mpg[i, displ],也就是第i行的displ值,这部分其实没问题;但new[i-1]会被理解为从当前行子集(仅第i行)的new列中取第i-1个元素,这显然不存在,会引发错误。
  • 而用mpg$displ和mpg$new是直接引用整个数据表的列,能正确定位到对应行的数值,所以才能正常运行。

无需使用setkey()

setkey()的作用是给data.table设置主键,用于快速匹配、表连接等场景,和逐行累加的需求完全无关,这里根本不需要用到这个函数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 00:20:21