如何基于多列缺失值筛选行?能否使用is.na()实现?
用is.na()筛选含指定数量缺失值的数据行
当然可以用is.na()实现这个需求,结合rowSums()统计每行的缺失值数量,就能精准筛选出符合条件的行。
先构造你的数据集
df <- data.frame( NO = 1:8, grade = c("A", NA, "i", "W", "e", NA, NA, NA), level = c("B", "A", "j", NA, "f", "A", NA, NA), score = c("C", NA, NA, NA, "g", NA, NA, NA), class = c("D", NA, NA, NA, "h", "S", NA, "B"), stringsAsFactors = FALSE )
筛选包含3个NA的行
通过rowSums(is.na(df[-1]))统计每行(排除序号列NO)的缺失值数量,筛选数量等于3的行:
df_3na <- df[rowSums(is.na(df[-1])) == 3, ] df_3na
结果:
| NO | grade | level | score | class |
|---|---|---|---|---|
| 2 | NA | A | NA | NA |
| 4 | W | NA | NA | NA |
| 8 | NA | NA | NA | B |
筛选包含2个NA的行
同理,统计缺失值数量等于2的行:
df_2na <- df[rowSums(is.na(df[-1])) == 2, ] df_2na
结果:
| NO | grade | level | score | class |
|---|---|---|---|---|
| 3 | i | j | NA | NA |
| 6 | NA | A | NA | S |
补充说明
- 如果需要统计所有列(包括
NO)的缺失值数量,直接使用rowSums(is.na(df))即可,这里NO列无缺失值,结果和上述一致。 is.na()会将每个元素转换为布尔值(缺失值为TRUE,非缺失为FALSE),rowSums()会把TRUE视为1、FALSE视为0,从而快速计算每行的缺失值总数。
内容的提问来源于stack exchange,提问作者Learning
相关产品推荐
相关产品推荐

