【问题标题】:Pass column name in data.table using variable [duplicate]使用变量在data.table中传递列名[重复]
【发布时间】:2012-09-18 04:57:27
【问题描述】:

可能重复:
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)]

【问题讨论】:

  • 使用get函数

标签: r data.table


【解决方案1】:

使用quote()eval() 函数将变量传递给j。当你这样做时,你不需要在列名上加上双引号,因为quote()-ed 字符串将在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

【讨论】:

  • 对于使用 R 3.2.0 的我来说,这不起作用。正如线程启动器所指出的,我必须使用 get(temp)。
  • 我已经在一个字符向量中有无数列名,所有列名都用双引号括起来。如何摆脱引号?
  • 如果您在列表语句中已经有大约 10 个列名,但您想添加其他数不胜数的列名,会发生什么情况。因此,对于上面的示例,它将是 DT[,list(favoritecolumn1, favoritecolumn2, favoritecolumn3, temp)
  • @exocom ...我遇到了同样的问题并使用了以下答案:stackoverflow.com/questions/12391950/…
  • 这对我有用:DT[, colnames, with=FALSE][[colnum]]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-16
  • 1970-01-01
  • 1970-01-01
  • 2021-10-14
  • 2018-07-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多