You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何na.rm=TRUE无法移除数据集缺失值?如何使其生效?

问题解析与解决方案

关键差异:na.rm=TRUE 和 na.omit() 完全是两回事

  • na.rm=TRUE 只是在计算统计量时临时跳过缺失值,不会对原数据集做任何修改,缺失值依然留在数据里。你用它跑summary,只是均值、中位数这些指标是忽略NA算出来的,但数据集本身的NA数量没变,所以summary结果里还是会显示有104个NA。
  • na.omit(data) 是直接删除数据集中所有包含NA的行,会生成一个没有缺失值的新数据集(或者覆盖原数据集),之后的所有操作都是基于这个干净的数据集,所以summary里看不到NA,统计量也和之前不一样——因为样本量少了那些含NA的行。

要移除数据集里的NA,你可以这么做

如果你想实现「移除缺失值」的效果(而不是只在计算时忽略),不需要依赖na.rm=TRUE,直接筛选掉有NA的行就行:

基础R写法

# 先把负值转成NA
edu2018$mathtest[edu2018$mathtest < 0] <- NA
# 筛选出mathtest列非NA的行,生成干净数据集
edu2018_clean <- edu2018[!is.na(edu2018$mathtest), ]
# 查看结果
summary(edu2018_clean$mathtest)

dplyr包写法(更简洁)

如果你用dplyr,可以这样写:

library(dplyr)

edu2018_clean <- edu2018 %>%
  mutate(mathtest = ifelse(mathtest < 0, NA, mathtest)) %>%
  filter(!is.na(mathtest))

summary(edu2018_clean$mathtest)

这样处理后,数据集里的NA就被彻底移除了,效果和你用na.omit()的结果一致(如果其他列没有缺失值的话)。

内容的提问来源于stack exchange,提问作者oioi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 03:30:52