gpt4 book ai didi

r - 在相同条件下为多列过滤 data.table

转载 作者:行者123 更新时间:2023-12-04 03:48:25 25 4
gpt4 key购买 nike

我正在使用列名向量来选择 data.table 的列的子集。我想到了是否可以在 i 中基本定义条件然后将其应用于所有选定的列。
例如使用 mtcars数据集。
我想选择列圆柱和齿轮,然后想过滤所有具有四个气缸和四个齿轮的汽车。当然我还需要定义它是否是 andor对于过滤器,但我只是对是否可以在 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]

最佳答案

我们可以使用 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') 进行比较, Reduce使用 | 将其转换为逻辑向量即每一行中的任何 TRUE 和基于此的行子集
dt[dt[, Reduce(`|`, lapply(.SD, `==`, 4)),.SDcols = sel.col], ..sel.col]

关于r - 在相同条件下为多列过滤 data.table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48641680/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com