r-在data.table中指定一个变量列名



我想做以下事情:

library(data.table)
dt <- data.table(Test = c(1:100))
var <- "TestPlusOne"
#METHOD 1
dt[, (var) := Test + 1][, c("TestPlusOne")]
#METHOD 2
dt[, .(TestPlusOne = Test + 1)]

我想做我在#METHOD 2中做的事情,但使用变量TestPlusOne,即我想在定义名称的变量var中传递列名。在第一个#METHOD 1中,实际的数据表发生了更改,但这是我希望防止的副作用。

是否可以更改#METHOD 2,使列名由var中的字符串给定?

附加信息:我不想向dt添加另一列,也不想深度复制对象dt来实现它,因为它看起来效率很低。我想用#METHOD 2来做。但我似乎不知道该怎么做。

一种方法是使用setNames():

dt[, setNames(.(Test + 1), var)]

也可以使用这种子集+链接破解,尽管它可能超出了目的。

dt[TRUE][, (var) := Test + 1][, "TestPlusOne"]
# or as nicola suggests
copy(dt)[, (var) := Test + 1][, "TestPlusOne"] 

一种可能性

setnames(data.table(dt$Test + 1), var)[]

导致

dt[, setnames(data.table(Test + 1), var)]

最新更新