Как использовать номера столбцов в функции фильтра dplyr - PullRequest
2 голосов
/ 11 ноября 2019

Как использовать функцию 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)},], но я бы хотел использовать это как часть %>% конвейера.

Мне не удалось выяснить синтаксис filter(), чтобы использовать номера столбцов, а не имена. Реальные данные имеют гораздо больше столбцов (> 100) и строк, а номера столбцов предоставляются внешним алгоритмом.

1 Ответ

2 голосов
/ 11 ноября 2019

Используйте 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
...