按变量定义的条件过滤行
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,]
但是,我希望能够将列名(即 val1
或 val2
)指定为变量,并将过滤器值指定为变量。我试过了
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
您可以将 eval
与 as.name
或 as.symbol
一起使用
x[eval(as.name(cname)) > cutoff]
# val1 val2
#1: 2 5
#2: 3 4
#3: 4 2
#4: 5 4
#5: 3 5
我有以下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,]
但是,我希望能够将列名(即 val1
或 val2
)指定为变量,并将过滤器值指定为变量。我试过了
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
您可以将 eval
与 as.name
或 as.symbol
x[eval(as.name(cname)) > cutoff]
# val1 val2
#1: 2 5
#2: 3 4
#3: 4 2
#4: 5 4
#5: 3 5