使用data.table进行子集列运算生成新列失败,求问题原因
问题分析与解决
错误点
- 变量名拼写错误:你定义的变量是
oldcols,但代码里写的是..ldcols,这是笔误,导致R找不到ldcols这个对象。 - 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 * cb_1 = b * 0.01 * c
内容的提问来源于stack exchange,提问作者schuler
相关产品推荐
相关产品推荐

