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

use*_*306 85 r data.table

可能重复:
可变地选择/分配data.table中的字段

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

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

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

DT[ , x]
# [1] "b" "b" "b" "a" "a"
Run Code Online (Sandbox Code Playgroud)

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

temp <- "x"
DT[ , temp]
# [1] "x"
Run Code Online (Sandbox Code Playgroud)

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

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

DT[ , get(temp)]
Run Code Online (Sandbox Code Playgroud)

Dou*_*ark 52

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

temp <- quote(x)
DT[ , eval(temp)]
# [1] "b" "b" "b" "a" "a"
Run Code Online (Sandbox Code Playgroud)

使用单个列名称,结果是向量.如果需要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
Run Code Online (Sandbox Code Playgroud)

  • 对于R 3.2.0,对我来说这不起作用.我必须使用线程启动器指出的get(temp). (25认同)
  • 这对我有用:`DT[, colnames, with=FALSE][[colnum]]` (6认同)
  • 我已经在一个字符向量中有很多列名称,并且在它们周围都有双引号.我如何摆脱报价? (2认同)
  • 如果您在列表语句中已经有大约10列名称但是您想要添加其他大量列名称会发生​​什么.因此对于上面的示例,它将是诸如`DT [,list(favoritecolumn1,favoritecolumn2,favoritecolumn3,temp)之类的东西. (2认同)
  • @exocom ...我有同样的问题,而是使用以下答案:/sf/ask/867436531/ -a-character-ve (2认同)