我想做以下事情:
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)]