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

可能的复制品:
变量选择/分配到 data.table 中的字段

在下面的示例中,我创建了一个列名为‘ x’和‘ v’的数据表

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

I can access values of column ‘x’ by :

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

但是如果我想通过传递一个变量来访问,它就不工作了

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

将有多个列,我将不得不为其中的两个列选择值。我将通过传递一个 R 模块来提供这些列名。

Never mind, I got it, it should be:

DT[ , get(temp)]
111075 次浏览

Use the quote() and eval() functions to pass a variable to j. You don't need double-quotes on the column names when you do it this way, because the quote()-ed string will be evaluated inside the DT[]

temp <- quote(x)
DT[ , eval(temp)]
# [1] "b" "b" "b" "a" "a"

对于单个列名,结果是一个向量。如果需要一个 data.table 结果或多个列,请使用列表形式

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