在R中如何逐行标记、统计缺失值?以airquality数据集为例
原有代码错误原因
你的for循环逻辑存在两个核心问题:
- 没有按行索引读取和赋值:
is.na(df_test$Ozone)返回的是整个Ozone列的布尔向量,if判断仅会读取向量第一个值,全局逻辑失效 - 赋值操作直接作用于整列:
df_test$Missing_Ozone <- 1会直接把整列设为1,不是修改对应行的取值,因此最终结果不符合预期
实现方案
基础R实现(无需安装额外包)
library(MASS) df_test <- airquality # 标记Ozone列是否缺失 df_test$Missing_Ozone <- as.integer(is.na(df_test$Ozone)) # 统计每行总缺失值数量 df_test$Missing_Total <- apply(df_test, 1, function(x) sum(is.na(x))) # 计算行缺失值占比 df_test$Missing_Percent <- 100 * df_test$Missing_Total / ncol(airquality)
tidyverse风格实现(dplyr)
library(MASS) library(dplyr) df_test <- airquality %>% mutate( Missing_Ozone = as.integer(is.na(Ozone)), Missing_Total = rowSums(is.na(across(everything()))), Missing_Percent = 100 * Missing_Total / ncol(.) )
执行后取前6行验证,和你给出的示例取值完全一致。
相关操作名称&搜索关键词
这类操作属于数据清洗环节下的缺失值探查/行级缺失值统计,搜索相关内容时可使用关键词:R 行缺失值计数、R 缺失值标记、R 按行统计缺失占比。
内容的提问来源于stack exchange,提问作者mathplzfun
相关产品推荐
相关产品推荐

