如何用dplyr筛选除指定变量外其余变量均无缺失值的观测?
用dplyr实现排除指定变量后筛选无NA行的方法
这里提供两种优雅的实现方式,无需手动罗列所有变量:
方法1:结合select和complete.cases
兼容大多数dplyr版本,逻辑直观:
library(dplyr) # 排除单个变量(比如var1) data %>% filter(complete.cases(select(., -var1))) # 排除多个变量(比如var1和var2) data %>% filter(complete.cases(select(., -c(var1, var2))))
思路是先通过select(., -var1)取出除目标变量外的所有列,再用complete.cases检查这些列是否完全无NA,最后筛选符合条件的行。
方法2:用if_all(dplyr 1.0.0及以上版本)
更贴合dplyr现代语法,代码更简洁:
library(dplyr) # 排除单个变量 data %>% filter(if_all(-var1, ~!is.na(.x))) # 排除多个变量 data %>% filter(if_all(-c(var1, var2), ~!is.na(.x)))
if_all(-var1, ~!is.na(.x))会对除var1外的每一列逐一检查元素是否非NA,只有当所有列都满足无NA时,该行才会被保留。
内容的提问来源于stack exchange,提问作者mdelas
相关产品推荐
相关产品推荐

