按变量定义的条件过滤行

Filtering rows by a criteria defined by variables

我有以下data.table

structure(list(val1 = c(1, 2, 1, 3, 4, 5, 3), val2 = c(4, 5, 6, 4, 2, 4, 5)), .Names = c("val1", "val2"), row.names = c(NA, -7L), class = c("data.table", "data.frame"), .internal.selfref = <pointer: 0xedae28>)

我想做的是根据其他变量定义的条件过滤其中的行。例如,我可能想要所有具有 val1 >= 1 的行。这很容易完成

x[val1 > 1,]

但是,我希望能够将列名(即 val1val2)指定为变量,并将过滤器值指定为变量。我试过了

cname = 'val1'
cutoff = 1
x[(cname >= cutoff),] # Try 1
x[(cname) >= (cutoff),] # Try 2
x[eval(cname > cutoff),] # Try 3

但它只是还给了原来的data.table

听起来你在找 get:

x[get(cname) > cutoff,]
#    val1 val2
# 1:    2    5
# 2:    3    4
# 3:    4    2
# 4:    5    4
# 5:    3    5

您可以将 evalas.nameas.symbol

一起使用
x[eval(as.name(cname)) > cutoff]
#    val1 val2
#1:    2    5
#2:    3    4
#3:    4    2
#4:    5    4
#5:    3    5