R:同时对多个变量应用过滤器



考虑以下数据:

x1 <- c("V", "v", "X", "x")
x2 <- c("x", "V", "X", "v")
x3 <- 1:4
df <- data.frame(x1 ,x2 ,x3)

我想获得在变量x1x2中包含Vv的所有观测值。我知道我可以使用随后的代码,它将产生期望的结果:

valid <- c("V", "v")
df %>% 
filter(x1 %in% valid) %>% 
filter(x2 %in% valid)

然而,在我的实际数据中,我需要在许多变量上应用这个过滤器,所以我想声明一个向量vars,并一次对所有这些vars应用过滤。

vars <- c("x1", "x2")
df %>% 
filter(all(vars %in% valid)) 

上面的代码不能工作,因为filter()不能接受字符向量作为输入,但也许有一个等价的all_of()any_of()可以与select()结合使用字符向量。

我将感激任何解决方案。卢卡斯

valid <- c("V", "v")
vars <- c("x1", "x2")
df %>% 
filter(if_all(all_of(vars),~ .%in% valid))
x1 x2 x3
1  v  V  2

最新更新