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

使用平均值替换Hitters数据集Salary列NA值时出现数据行数异常

问题解决:Hitters数据集Salary列NA填充后仅保留一行数据

错误根源

你的代码中这一行导致了问题:

hitters_num <- Hitters[, sapply(Hitters, is.numeric)][1, ]

末尾的[1, ]强制提取了数据框的第一行,后续所有填充操作都只针对这一行执行,最终结果自然只有一行数据。

修正方案

方案1:保留原逻辑,修正行提取错误

移除[1, ],保留所有行的数值型列:

# 提取所有行的数值型列
hitters_num <- Hitters[, sapply(Hitters, is.numeric)]
hitters_num_imputed <- hitters_num

# 计算各列均值(忽略NA)
col_means <- colMeans(hitters_num, na.rm = TRUE)

# 循环填充每列的NA值
for (i in 1:ncol(hitters_num)) {
  col <- hitters_num[, i]
  col[is.na(col)] <- col_means[i]
  hitters_num_imputed[, i] <- col
}

# 查看填充后的结果
summary(hitters_num_imputed)

方案2:仅处理Salary列(更高效)

既然你的需求只是填充Salary列的NA值,没必要处理所有数值型列,直接针对目标列操作:

# 直接将Salary列的NA替换为该列均值
Hitters$Salary[is.na(Hitters$Salary)] <- mean(Hitters$Salary, na.rm = TRUE)

# 验证结果
summary(Hitters$Salary)

方案3:用apply简化代码

如果需要批量处理所有数值列的NA,用apply可以替代循环,代码更简洁:

hitters_num <- Hitters[, sapply(Hitters, is.numeric)]
hitters_num_imputed <- as.data.frame(apply(hitters_num, 2, function(x) {
  x[is.na(x)] <- mean(x, na.rm = TRUE)
  return(x)
}))

summary(hitters_num_imputed)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 17:39:24