在多个列的相同条件下过滤data.table

时间:2018-02-06 11:12:39

标签: r data.table

我使用列名矢量来选择data.table的列子集。我有这个想法,是否可以基本定义i中的条件,然后将条件应用于所有选定的列。 例如,使用mtcars数据集。 我想选择气缸和齿轮柱,然后想要过滤所有有四个气缸和四个齿轮的车。当然,我还需要为过滤器定义它是and还是or,但我只是想知道这个想法是否可以在data.table上下文中以某种方式应用。

# working code
sel.col <- c("cyl", "gear")
dt <- data.table(mtcars[1:4,])

dt[, ..sel.col]
dt[cyl == 4 & gear == 4, ..sel.col]    


# Non-working code
dt[ sel.col == 4 , ..sel.col]

1 个答案:

答案 0 :(得分:10)

我们可以使用get

sel.col <- "cyl"
dt[get(sel.col) == 4, ..sel.col]
#    cyl gear
#1:   4    4

eval(as.name

dt[eval(as.name(sel.col)) == 4, ..sel.col]
#    cyl gear
#1:   4    4

早些时候,我们认为只有一列需要评估。如果我们有多个列,请在.SDcols中指定,循环遍历Data.table(.SD)的子集,将其与感兴趣的值('4')进行比较,{{1}它与Reduce的逻辑向量,即每行中的任何TRUE,并基于此对行进行子集

|