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

如何在R data.table中以列值为求和上限生成新列?

在data.table中生成1到x的求和列y

最优方案:利用等差数列求和公式

1到n的和有现成的数学公式:n*(n+1)/2,这是矢量化操作,无需逐行计算,速度极快,完全适配data.table的语法,不管x列的数值是否有序、是否有规律都能用:

library(data.table)
dt <- data.table(x = c(2,3,4,5)) # 示例数据
dt[, y := x * (x + 1) / 2]

运行后结果完全符合需求:

xy
23
36
410
515

逐行计算的data.table写法(适合类似逐行操作场景)

如果遇到无法用公式简化的逐行计算需求,可以用sapply实现逐行处理:

dt[, y := sapply(x, function(n) sum(1:n))]

这种方式会遍历x的每个元素,计算对应1到n的和,但效率远低于公式法,数据量大时不推荐。

为什么之前的写法出错?

你用的dt[,y:=sum(c(1:x))]会报错/警告,是因为在data.table的j表达式中,x是整个列的向量,1:x会被解析为从1到x向量的第一个元素(当x是多元素向量时,R会抛出警告),而sum()是对整个生成的向量求和,最终得到一个单一值并重复赋值给所有行,自然不是逐行的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 04:12:37