如何使用第 i 个位置的变量来过滤行

How to use a variable in the i position to filter rows

示例数据

d<-data.table(a=c(1,2,3,4,5))

我想要这个结果:

d[a < 3]

如何使用 my.column 实现相同的效果?

my.column<-'a'
d[my.column < 3]
#Empty data.table (0 rows) of 1 col: a

虽然下面的方法有效,但我希望有更好的方法:

setnames(d,my.column,"my.column")
d[my.column<3,]
setnames(d,'my.column',my.column)

请注意,这也不起作用

setkey(d,my.column)

正如大卫在评论中指出的那样,您可以使用

d[get(my.column) < 3]

我个人更喜欢的另一种方法是为 i 构建调用而不是获取变量:

d[eval(as.name(my.column)) < 3]

不确定在 i 中使用时的性能。如果在 j arg 中使用,我相信 eval(as.name( 会稍微快一些——取决于 AFAIK 的列数。