С помощью dplyr
вы можете сделать:
df %>%
filter_at(vars(contains(".A")), all_vars(grepl("BA", .) | is.na(.)))
Col1 Col2 Col2.A Col3 Col3.A
1 1 3 BA 0 BA
2 2 5 BA 1 <NA>
3 9 10 BA 4 <NA>
Он фильтрует на основе переменных, содержащих «.A», и сохраняет строки, в которых все переменные равны «BA» или NA.
Или упрощенная версия на основе сообщения от @Gregor:
df %>%
filter_at(vars(contains(".A")), all_vars(. == "BA" | is.na(.)))
Пример данных:
df <- read.table(text = "Col1 Col2 Col2-A Col3 Col3-A
1 3 BA 0 BA
2 5 BA 1 NA
3 7 BA 0 JN
5 9 KD 1 BA
9 10 BA 4 NA", header = TRUE, stringsAsFactors = FALSE)