考虑以下数据:
x1 <- c("V", "v", "X", "x")
x2 <- c("x", "V", "X", "v")
x3 <- 1:4
df <- data.frame(x1 ,x2 ,x3)
我想获得在变量x1
和x2
中包含V
或v
的所有观测值。我知道我可以使用随后的代码,它将产生期望的结果:
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