我使用列名矢量来选择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]
答案 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,并基于此对行进行子集
|