将列名称的向量与data.table中的数学语句混合

时间:2014-10-14 13:35:23

标签: r data.table

使用data.table,我想转一个声明,例如

dat <- data.table(x1=1:10, x2=1:10, x3=21:30)
dat[, list(newcol=x1+2, x2, x3)]

进入以下类似的工作:

columns <- c("x2","x3")
dat[, list(newcol=x1+2, columns)]

如果我想要选择的只是columns变量中的列列表,那么

dat[, columns, with=F]

但在此示例中,我还想创建列newcol。有解决方法吗?

2 个答案:

答案 0 :(得分:3)

我认为在一个理想的世界里,我喜欢这样的工作:

dat[, c(list(newcol=x1+2), mget(columns))]

但它没有,因为没有处理mget参数来决定是否应该将更多列添加到内部data.table环境中(可能OP可以添加关于此的功能请求)

上述一种解决方法是将所有列添加到环境中:

dat[, {.SD; c(list(newcol=x1+2), mget(columns))}]
#    newcol x2 x3
# 1:      3  1 21
# 2:      4  2 22
# 3:      5  3 23
# 4:      6  4 24
# 5:      7  5 25
# 6:      8  6 26
# 7:      9  7 27
# 8:     10  8 28
# 9:     11  9 29
#10:     12 10 30

答案 1 :(得分:-1)

尝试:

dat[, list(newcol=x1+2), by=columns]
#      x2 x3 newcol
#  1:  1 21      3
#  2:  2 22      4
#  3:  3 23      5
#  4:  4 24      6
#  5:  5 25      7
#  6:  6 26      8
#  7:  7 27      9
#  8:  8 28     10
#  9:  9 29     11
# 10: 10 30     12