我如何定义一个变量来设置i中data.table的多列?

时间:2019-04-09 16:22:08

标签: r data.table

我的一个常见任务是过滤(子集)data.tables格式的数据集。我想以多种列特定的布尔条件以一种复杂的方式对i中的行进行子集化。当我得到一个新的数据集时,它将具有相同的列类型,并且我想以相同的方式对所有数据集进行过滤。

为了说明我的任务,让我首先创建一个示例数据表。

library(data.table)

dt <- data.table(a = seq(1,6), b = letters[seq(1,6)], c = rep(c(4,3,2)))

这产生

   a b c
1: 1 a 4
2: 2 b 3
3: 3 c 2
4: 4 d 4
5: 5 e 3
6: 6 f 2

。假设我要对列应用以下过滤条件:

 dt[b != 'd'][c < 4][a < 6]

屈服

 a b c
1: 2 b 3
2: 3 c 2
3: 5 e 3

。有没有一种方法可以将过滤条件转换为变量,以便我可以将其标记到data.table的末尾?

我尝试了

x <- [b != 'd'][c < 4][a < 6]
dt[x]

但这会引发错误

Error: unexpected '[' in "x <- ["

。这将非常有用,因为我可以通过仅更改变量x来更新过滤策略,然后将此过滤器应用于所有data.tables。

1 个答案:

答案 0 :(得分:1)

如果要应用于其他数据集,请quote表达式并在每个数据集上求值

i1 <- quote(b != 'd' & c < 4 & a < 6)
dt[dt[, eval(i1)]]
#   a b c
#1: 2 b 3
#2: 3 c 2
#3: 5 e 3