【问题标题】:How to use column numbers in the dplyr filter function如何在 dplyr 过滤函数中使用列号
【发布时间】:2020-03-06 19:31:35
【问题描述】:

如何将dplyr::filter() 函数与列号而不是列名一起使用?

例如,我想选择外部选择的列并返回全为零的行。例如,对于这样的数据框

> test
# A tibble: 10 x 4
    C001  C007  C008  C020
   <dbl> <dbl> <dbl> <dbl>
 1    -1    -1     0     0
 2     0     0     0     0
 3     1     1     0     0
 4    -1    -1     0     0
 5     0     0     0    -1
 6     0     0     0     1
 7     0     1     1     0
 8     0     0    -1    -1
 9     1     1     0     0
10     0     0     0     0

还有一个向量 S = c(1,3,4) 我如何在 test 中选择 all(x==0) 中的所有行?我可以使用test[apply(test[,S] 1, function(x){all(x==0)},] 来做到这一点,但我想将其用作%&gt;% 管道的一部分。

我无法弄清楚filter() 语法使用列号而不是名称。真实数据有更多的列 (>100) 和行,列号由外部算法提供。

【问题讨论】:

    标签: r filter syntax dplyr tidyverse


    【解决方案1】:

    filter_atall_vars 一起使用

    library(dplyr)
    df %>% filter_at(c(1,3,4), all_vars(.==0))
    
     C001 C007 C008 C020
    1    0    0    0    0
    2    0    0    0    0
    

    【讨论】:

    • 也更快! 1.5 倍加速。谢谢
    猜你喜欢
    • 2021-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多