【发布时间】:2019-04-09 16:22:08
【问题描述】:
我的一个常见任务是以 data.tables 格式过滤(子集)数据集。我想使用多个特定于列的布尔条件以复杂的方式对 i 中的行进行子集化。当我获得一个新数据集时,它将具有相同类型的列,我希望以相同的方式对所有数据集进行过滤。
为了说明我的任务,让我首先创建一个示例 data.table。
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。
【问题讨论】:
-
你需要
i1 <- dt[, b != 'd' & c < 4 & a < 6]; dt[i1]
标签: r data.table