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

使用data.table进行子集列运算生成新列失败,求问题原因

问题分析与解决

错误点

  1. 变量名拼写错误:你定义的变量是oldcols,但代码里写的是..ldcols,这是笔误,导致R找不到ldcols这个对象。
  2. data.table赋值语法不规范:即使修正拼写,直接用DT[, ..oldcols] * 1e-2 * DT[, "c"]的写法虽然能运算,但在:=赋值时,更推荐用data.table内置的.SD(Subset of Data)机制,避免重复调用DT,同时让代码更简洁高效。

正确代码示例

方法1:使用.SD和.SDcols(推荐)

library(data.table)

DT <- data.table(
  ID=c("b", "b", "b", "a", "a", "c"), 
  a=1:6, 
  b=7:12, 
  c=13:18
)

oldcols <- c("a", "b")
newcols <- c("a_1", "b_1")

# 对指定列进行运算并赋值新列
DT[, c(newcols) := lapply(.SD, function(col) col * 1e-2 * c), .SDcols = oldcols]

方法2:简化的.SD写法

# 更简洁的版本,直接利用data.table的列引用特性
DT[, c(newcols) := .SD * c * 1e-2, .SDcols = oldcols]

效果验证

运行后DT会新增a_1和b_1列,其中:

  • a_1 = a * 0.01 * c
  • b_1 = b * 0.01 * c

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 14:42:09