使用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
。有解决方法吗?
答案 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