У меня есть следующий фрейм данных:
A B C D
1 1 2 3 T
2 1 5 5 F
3 1 1 1 T
4 5 5 5 T
5 5 5 5 T
Я пытаюсь удалить строки, содержащие все одно и то же число (например, все 5 с, все 1 с) для переменных A
до C
(в моих реальных данных у меня есть еще много переменных между A
и C
). Я могу отфильтровать строки по всем 5, выполнив следующее:
library(dplyr)
A <- c(1, 1, 1, 5, 5)
B <- c(2, 5, 1, 5, 5)
C <- c(3, 5, 1, 5, 5)
D <- c(2, 2, 2, 2, 2)
df <- data.frame(A, B, C, D)
df %>%
filter_at(.vars = 1:3, .vars_predicate = all_vars(. == 5))
A B C D
1 5 5 5 T
2 5 5 5 T
Есть ли способ связать еще один filter_at()
, чтобы я мог сделать то же самое для строк со всеми 1? Идеальный результат будет выглядеть так:
A B C D
1 5 5 5 T
2 5 5 5 T
3 1 1 1 T
Я пытался использовать логические операторы в all_vars()
, но он не дает правильного результата. В приведенном ниже кадре данных мы получаем строки, которые содержат как 5, так и 1 с.
df %>%
filter_at(.vars = 1:3, .vars_predicate = all_vars(. == 5 | . == 1))
A B C D
1 1 5 5 F
2 1 1 1 T
3 5 5 5 T
4 5 5 5 T
Опять же, я стараюсь избегать ручной фильтрации каждой переменной (например, filter(A == 1 & B == 1 ... )
), потому что у меня много десятков другие столбцы.
Любые альтернативные подходы или предложения пакетов приветствуются.