R语言筛选全科目NA的ID与年份及指定列NA查询需求
原始数据表
| ID | Year | Maths_sub | Eng_sub | Chem_sub | Comp_sub |
|---|---|---|---|---|---|
| 1 | 2010 | 20 | 15 | 12 | NA |
| 2 | 2015 | 17 | 20 | 14 | 16 |
| 3 | 2012 | NA | 17 | 12 | NA |
| 4 | 2015 | 14 | 13 | NA | NA |
| 5 | 2016 | NA | NA | NA | NA |
| 6 | 2015 | NA | NA | NA | NA |
需求1:筛选所有科目列均为NA的ID和Year
你之前的代码把数据转成了长格式,最终得到的是每个ID对应的缺失变量清单,和需求不符。可以用dplyr的if_all函数直接判断每行中所有以sub结尾的列是否全为NA,再筛选目标列:
library(dplyr) df %>% filter(if_all(ends_with("sub"), is.na)) %>% select(ID, Year)
运行结果:
| ID | Year |
|---|---|
| 5 | 2016 |
| 6 | 2015 |
需求2:筛选指定列(Maths_sub和Comp_sub)均为NA的ID和Year
同样用if_all,但明确指定要检查的列名即可实现精准筛选:
df %>% filter(if_all(c(Maths_sub, Comp_sub), is.na)) %>% select(ID, Year)
运行结果:
| ID | Year |
|---|---|
| 3 | 2012 |
| 5 | 2016 |
| 6 | 2015 |
内容的提问来源于stack exchange,提问作者theD
相关产品推荐
相关产品推荐

