【问题标题】:Can you use .SDcols to subset rows in data.table您可以使用 .SDcols 对 data.table 中的行进行子集化吗
【发布时间】:2021-12-18 04:12:18
【问题描述】:

有没有办法在数据表中使用 .SDcols 来选择行。例如,在 mtcars 中,选择 vs、am 和 carb 都等于 1 的行。我有很多列,希望避免大量输入。

我知道这行不通

 mtcars[ lapply( .SD == 1),  , .SDcols = c('vs, 'am', 'carb')]

【问题讨论】:

    标签: r datatable


    【解决方案1】:

    我们可能需要Reduce 来返回单个逻辑向量并将其用作子集的索引

    library(data.table)
    mtcars[mtcars[, Reduce(`&`, lapply( .SD, `==`,  1)), 
             .SDcols = c('vs', 'am', 'carb')]]
    

    -输出

        mpg cyl  disp hp drat    wt  qsec vs am gear carb
    1: 22.8   4 108.0 93 3.85 2.320 18.61  1  1    4    1
    2: 32.4   4  78.7 66 4.08 2.200 19.47  1  1    4    1
    3: 33.9   4  71.1 65 4.22 1.835 19.90  1  1    4    1
    4: 27.3   4  79.0 66 4.08 1.935 18.90  1  1    4    1
    

    或者使用rowSums创建逻辑向量

    mtcars[mtcars[, .I[rowSums(.SD == 1) == 3], .SDcols = c('vs', 'am', 'carb') ]]
    

    数据

    mtcars <- as.data.table(mtcars)
    

    【讨论】:

      猜你喜欢
      • 2020-07-24
      • 2015-06-26
      • 1970-01-01
      • 2015-09-28
      • 1970-01-01
      • 2013-11-17
      • 2021-07-23
      • 2018-06-22
      • 1970-01-01
      相关资源
      最近更新 更多