这可能是一个非常基本的问题。我想在现有数据中创建一个新变量。表对象,并希望以不同的名称保存新对象。然而,我正面临一个问题:
library(data.table)
DT = data.table(x=rep(c("b","a","c"),each=3), y=c(1,3,6), v=1:9)
a <- colnames(DT)[-1] #variables to be modified
a.va <- paste(a, "x", sep = "_") #new variables name
DT2 <- DT[, (a.va) := lapply(.SD, FUN = function(x) (sum(x, na.rm = T)-x) / (.N - 1)), .SDcols = a, by = x]
但是,它也改变了现有的两个对象DT
。我想保持原始物体DT
的完整。在我的原始数据集中,有100多个变量,所以我不能逐个创建单独的变量。
:=
将改变当前对象,同时添加一个新列,因为它通过引用。如果我们想要一个新对象,使用copy
从'DT'创建一个新对象,然后对复制的对象执行:=
赋值操作
DT2 <- copy(DT)
DT2[, (a.va) := lapply(.SD, FUN = function(x) (sum(x, na.rm = T)-x) / (.N - 1)), .SDcols = a, by = x]
检查
> names(DT2)
[1] "x" "y" "v" "y_x" "v_x"
> names(DT)
[1] "x" "y" "v"