缺失值的常见表现
做ref="/tag/426/" style="color:#E3A3CF;font-weight:bold;">数据分析时,经常会遇到数据不完整的情况。比如调查问卷里有人没填年龄,或者传感器记录温度时突然断电,导致某段时间的数据为空。在R语言中,这些空值会被标记为 NA,也就是“Not Available”。如果不处理好这些缺失值,后续的统计分析结果可能就会跑偏。
识别缺失值的位置
先要知道哪些地方有缺失。可以用 is.na() 函数来检查:
data <- c(1, 2, NA, 4, NA, 6)
is.na(data)返回的是一个逻辑向量,TRUE 表示对应位置是缺失值。如果想看整体有多少个缺失,可以这样写:
sum(is.na(data))这能快速告诉你数据里藏了多少个 NA。
删除含有缺失值的行
有些分析方法不能容忍缺失值,最简单的办法就是把含有 NA 的行删掉。用 na.omit() 就行:
clean_data <- na.omit(data.frame(x = c(1, 2, NA), y = c("a", NA, "c")))处理后得到的数据框会自动去掉任何包含缺失值的行。适合数据量大、缺失比例低的情况。
用均值或中位数填充
如果直接删掉觉得可惜,尤其是样本本来就少的时候,可以选择填充。比如用变量的均值补全缺失的数值:
data$age[is.na(data$age)] <- mean(data$age, na.rm = TRUE)这行代码先把 age 变量中的 NA 找出来,然后替换成已有值的平均数。注意 na.rm = TRUE 是必须加的,不然算均值时也会变成 NA。
使用多重插补法提升准确性
更高级的做法是用插补模型来预测缺失值。mice 包在这方面很常用:
library(mice)
imputed <- mice(data, m = 5, method = "pmm", seed = 123)
complete_data <- complete(imputed)它会基于其他变量的关系,生成多个可能的填补版本,最后合并结果,比简单填充更可靠。适合医学、社会调查这类复杂数据。
可视化缺失模式
有时候你想看看缺失是不是有规律。比如某些人总是跳过收入相关的问题,可能是有意回避。用 visdat 包可以画出缺失分布图:
library(visdat)
vis_miss(data)图表会显示每一列的缺失情况,还能看出是否存在系统性缺失,帮助你判断该用哪种处理方式。
实际操作中,没有一种方法通吃所有场景。关键是要理解数据来源和缺失原因,再选择合适策略。盲目填充或者一股脑删除,都可能让分析结果失真。