Если нам нужно изменить эти столбцы, можно использовать mutate_all
library(dplyr)
df2 <- df1 %>%
mutate_if(is.numeric, ~
if(length(setdiff(unique(na.omit(.)), c(1, 2))) ==0) .-1 else .)
df2
# col1 col2 grp col3 col4
#1 1 0 a -0.5458808 5
#2 2 1 b 0.5365853 7
#3 3 NA c 0.4196231 1
#4 4 0 d -0.5836272 2
#5 5 1 e 0.8474600 3
Для выбора столбцов select
или select_if
будет более полезным, чем filter
, так как filter
предназначен для фильтрации строк вместо столбцов
df1 %>%
select_if(~ length(setdiff(unique(na.omit(.)), c(1, 2))) ==0)
# col2
#1 1
#2 2
#3 NA
#4 1
#5 2
data
set.seed(24)
df1 <- data.frame(col1 = 1:5, col2 = rep(c(1:2, NA), length.out = 5),
grp = letters[1:5], col3 = rnorm(5), col4 = c(5, 7, 1, 2, 3) )