r - 将变量作为data.table列名称

时间:2015-10-08 03:41:39

标签: r data.table

我使用的越多,data.table替换dplyr的次数就越多,因为我的“转到”#39;包装作为它提供的速度是一个很大的优点。

问题

您可以在data.table(i)中将变量传递给dt[i,j]而不创建expression吗?

示例

给出data.table:

library(data.table)
dt <- data.table(val1 = c(1,2,3),
                 val2 = c(3,2,1))

我想评估一下:

dt[(val1 > val2)]

但使用变量来引用列名。例如,

myCol <- c("val1", "val2")  ## vector of column names

我已经阅读了lots of questions,其中显示了使用表达式执行此操作的方法:

## create an expression to evaluate
expr <- parse(text = paste0(myCol[1], " > ", myCol[2]))

## evaluate expression
dt[(eval(expr))]

   val1 val2
1:    3    1

但我想知道是否还有更多&#39;直接&#39;这样做的方式我错过了,类似于:

dt[(myCol[1] > myCol[2])] 

expression路线是应该这样做的方式吗?

1 个答案:

答案 0 :(得分:8)

我们可以使用eval(as.name(..

dt[eval(as.name(myCol[1]))> eval(as.name(myCol[2]))]

或者我们可以在.SDcols

中指定它
dt[dt[, .I[.SD[[1]]> .SD[[2]]], .SDcols= myCol]]

或@thelatemail

使用get的选项
dt[get(myCol[1]) > get(myCol[2])]

如果只有两个元素,我们也可以将Reducemget一起使用(@ thelatemail答案的略微变化)

dt[Reduce('>', mget(myCol))]