首页 > 解决方案 > 如何在 dplyr 过滤函数中使用列号

问题描述

如何使用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

和一个向量我将如何选择where 中S = c(1,3,4)的所有行?我可以用 an 来做到这一点,但我想把它用作管道的一部分。testall(x==0)test[apply(test[,S] 1, function(x){all(x==0)},]%>%

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

标签: rfiltersyntaxdplyrtidyverse

解决方案


filter_at与_all_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

推荐阅读