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

如何将数据框数值列中的NA值替换为对应列的中位数?

R数据框数值列缺失值中位数填充方案

方案1:dplyr 1.0.0+ 推荐写法(使用across)

直接搭配dplyr的across函数批量处理所有数值列即可,非数值列会自动保留不做修改:

# 加载dplyr包
library(dplyr)

# 中位数填充数值列NA
my_df_filled <- my_df %>%
  mutate(
    across(where(is.numeric), ~ifelse(is.na(.), median(., na.rm = TRUE), .))
  )

参数说明:

  • where(is.numeric) 筛选所有数值类型的列,仅对这些列执行填充操作
  • na.rm = TRUE 必须设置,否则计算列中位数时会因为存在NA返回NA,无法完成填充
  • 如果需要保留原数值列、生成独立的填充后列,可以给across增加.names参数:across(..., .names = "{.col}_filled"),生成的新列会自动带上_filled后缀

方案2:旧版dplyr兼容写法(mutate_if)

如果你使用的是1.0.0之前的dplyr版本,可以和你用到的select_if对应,用mutate_if实现相同效果:

my_df_filled <- my_df %>%
  mutate_if(is.numeric, ~ifelse(is.na(.), median(., na.rm = TRUE), .))

效果验证

你提供的示例数据运行填充后,my_values_1和my_values_2的NA都会被替换为对应列的中位数8.5,分组列my_groups保持原样。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 04:36:03