我理解如何使用.SD对多个列执行操作;我只是不知道如何将这些新值分配给我的数据表中的新变量(不覆盖输入变量)
在这个例子中,我创建了三个以字符串" newvars"结尾的新变量。我将这些新变量重新合并到数据表中。是否可以在没有合并的情况下创建新的变量?
mtcars <- data.table( mtcars )
newvars <- mtcars[ , lapply( .SD , function( Z ) Z * mtcars[[ "wt" ]]) , .SDcols= c("hp","drat","gear")]
colnames( newvars ) <- paste( colnames( newvars) , "newvars", sep="_")
mtcars <- cbind( mtcars , newvars )
似乎应该有一种直接的方式来做到这一点。
如果我没有这么多专栏,我会逐一完成这些专栏
mtcars[ , hp_new := hp*wt ]
感谢。
答案 0 :(得分:4)
IIUC,您正在添加新列。惯用方法是使用:=
,如下所示:将()
:=
中
library(data.table)
mtc <- data.table(mtcars)
cols <- c("hp", "drat", "gear")
mtc[, (paste0(cols, "_newvars")) := lapply(.SD, `*`, wt), .SDcols=cols]
mtc
此外,您无需在wt
内使用[[
访问j
列(有关?data.table
的定义,请参阅j
)