如何在R语言中对多个变量批量应用筛选条件
批量筛选多变量均符合条件的观测
原始数据
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的观测行。
单变量分步筛选(可行但低效)
如果变量数量少,可以多次调用filter()实现,但变量多的时候操作起来很麻烦:
valid <- c("V", "v") df %>% filter(x1 %in% valid) %>% filter(x2 %in% valid)
批量筛选的错误尝试
想用字符向量批量指定变量,但直接这么写会失效——filter()没法直接处理字符向量输入:
vars <- c("x1", "x2") df %>% filter(all(vars %in% valid))
正确的批量实现方法
用across()搭配all_of()就能搞定批量筛选,代码如下:
valid <- c("V", "v") vars <- c("x1", "x2") df %>% filter(across(all_of(vars), ~ .x %in% valid))
逻辑说明
all_of(vars):把字符向量里的变量名转换成dplyr能识别的变量引用across():对all_of(vars)指定的所有变量,统一应用后面的筛选条件~ .x %in% valid:每个变量都要满足“值在valid向量里”的要求,across()默认会确保所有变量的条件都成立才保留该行
内容的提问来源于stack exchange,提问作者DuesserBaest
相关产品推荐
相关产品推荐

