我使用列名称向量来选择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]
Run Code Online (Sandbox Code Playgroud)
akr*_*run 10
我们可以用 get
sel.col <- "cyl"
dt[get(sel.col) == 4, ..sel.col]
# cyl gear
#1: 4 4
Run Code Online (Sandbox Code Playgroud)
要么 eval(as.name
dt[eval(as.name(sel.col)) == 4, ..sel.col]
# cyl gear
#1: 4 4
Run Code Online (Sandbox Code Playgroud)
早些时候,我们认为只有一列需要评估.如果我们有多个列,请在.SDcols循环中通过Data.table(.SD)的子集将其指定为与感兴趣的值('4')进行比较,将Reduce其与逻辑向量进行比较,|即每行中的任何TRUE和基于此对行进行子集化
dt[dt[, Reduce(`|`, lapply(.SD, `==`, 4)),.SDcols = sel.col], ..sel.col]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2451 次 |
| 最近记录: |