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

如何用各列中位数替换数据框NA值?R代码报错排查与解决

问题分析与代码修正

你的代码出现报错 Error in [.default(df1, col) : invalid subscript type 'closure' 主要有两个原因:

  1. 错误调用median函数:median[col] 写法错误,median 是R中的函数(属于closure类型),不能用方括号索引。需针对当前列计算中位数,正确写法为 median(x, na.rm = TRUE)。
  2. NA值判断逻辑错误:x %in% is.na(df1) 逻辑混乱,is.na(df1) 返回整个数据框的NA判断矩阵,而你需要的是当前列x中的NA值,正确写法是 is.na(x)。

修正后的完整代码

id <- c(1,2,3,4,5,6,7,8,9,10)
varA <- c(15,10,8,19,7,5,NA,11,12,NA)
varB <- c(NA,1,2,3,4,3,3,2,1,NA)
df <- data.frame(id, varA,varB)

df1 <- df

# 需要替换NA的列
col <- c("varA", "varB")                           

# 遍历目标列,用列中位数替换NA
df1[col] <- sapply(df1[col], function(x) {
  # 计算当前列的中位数(忽略NA)
  col_median <- median(x, na.rm = TRUE)
  # 替换当前列中的NA值为中位数
  replace(x, is.na(x), col_median)
})

df1 

运行结果

修正后代码运行输出:

id  varA varB
1   1 15.00  2.5
2   2 10.00  1.0
3   3  8.00  2.0
4   4 19.00  3.0
5   5  7.00  4.0
6   6  5.00  3.0
7   7 10.50  3.0
8   8 11.00  2.0
9   9 12.00  1.0
10 10 10.50  2.5

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 23:50:28