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

R data.table中能否对新创建的列使用shift()函数?

R data.table新创建列调用shift()问题解答

核心结论

不可以在同一个:=多列赋值语句中直接调用刚创建的其他列。

报错原因

data.table的:=操作符在同时赋值多个列时,所有赋值表达式是并行计算的,不会按书写顺序从左到右依次执行。你给出的示例中,d=shift(c,-1)执行时列c还未完成创建,因此会提示列c不存在,这和for循环顺序执行的逻辑有本质区别。

解决方案

方案1:拆分赋值步骤

先单独计算并创建列c,再在第二个:=语句中基于c计算d:

library(data.table)
x <- data.table(a = c(1,2,3), b = c(4,5,6))
x[, c := a * b]
x[, d := shift(c, -1)]

方案2:单语句内用大括号封装顺序计算

如果不想拆分赋值语句,可以通过大括号包裹逻辑,先计算出c的临时值,再同时返回两个列的结果完成一次性赋值:

library(data.table)
x <- data.table(a = c(1,2,3), b = c(4,5,6))
x[, c("c", "d") := {
  c_val <- a * b
  .(c_val, shift(c_val, -1))
}]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 20:36:03