我使用一个列名向量来选择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]
2条答案
按热度按时间a9wyjsp71#
我们可以使用
get
或
eval(as.name)
前面,我们认为只有一个列需要计算。如果我们有多个列,在
.SDcols
中指定它,循环通过数据子集。table(.SD
)将其与感兴趣的值('4 ')进行比较,Reduce
将其与|
的逻辑向量进行比较,即每个行中的任何TRUE,并根据此htrmnn0y2#
我知道这是一个相当古老的线程,但我认为社区仍然会受益于一个更简单的解决方案。
我们可以使用
data.table
join来处理多列的情况或者在一行中:
子集条件可以使用非等连接进一步推广,例如
cyl >= 4
。这种方法已经被描述为here。