使用.SD在data.table中的多个变量上应用函数时,分配新变量

时间:2018-05-11 00:45:13

标签: r data.table

我理解如何使用.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 ]

感谢。

1 个答案:

答案 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