使用变量在data.table中传递列名

时间:2012-09-26 14:23:18

标签: r data.table

  

可能重复:
  Variably selecting/assigning to fields in a data.table

在下面的示例中,我创建了一个列名为“x”和“v”

的数据表
library('data.table')
DT <- data.table(x = c("b","b","b","a","a"), v = rnorm(5))

我可以通过以下方式访问列'x'的值:

DT[ , x]
# [1] "b" "b" "b" "a" "a"

但是如果我想通过传递变量来访问它,它就不起作用

temp <- "x"
DT[ , temp]
# [1] "x"

会有多个列,我只需要为其中的几个选择值。我将通过R模块提供这些列名。

没关系,我明白了,应该是:

DT[ , get(temp)]

1 个答案:

答案 0 :(得分:49)

使用quote()eval()函数将变量传递给j。当您这样做时,您不需要对列名称使用双引号,因为quote() - ed字符串将在DT[]

内进行评估
temp <- quote(x)
DT[ , eval(temp)]
# [1] "b" "b" "b" "a" "a"

使用单个列名称,结果是向量。如果需要data.table结果或多个列,请使用list form

temp <- quote(list(x, v))
DT[ , eval(temp)]
#   x           v
# 1: b  1.52566586
# 2: b  0.66057253
# 3: b -1.29654641
# 4: a -1.71998260
# 5: a  0.03159933