如何在R语言数据框中为同一ID的多条记录用均值填充NA?
使用dplyr按ID分组填充缺失的height值
直接用dplyr的分组+列修改就能解决这个问题,完整代码如下:
library(dplyr) # 你的原始数据 df <- data.frame(id = c(1,1,1,2,2,2,2,2,3,3,3,3), height = c(150, NA, 151, NA, NA, 176, 175, 174, 198, NA, 197, 198)) # 分组填充缺失值 df_filled <- df %>% group_by(id) %>% mutate(height = ifelse(is.na(height), mean(height, na.rm = TRUE), height)) %>% ungroup() # 查看结果 print(df_filled)
关键步骤解释:
group_by(id):按id字段对数据分组,确保后续的均值计算和填充操作都只在每个ID的组内进行。mutate(height = ...):修改height列,用ifelse()做条件判断:- 如果当前
height是NA,就替换为该组内height的均值(na.rm = TRUE必须加上,不然组内有NA时均值会变成NA,无法完成填充); - 如果不是NA,保留原始值。
- 如果当前
ungroup():取消分组,让数据回到常规的数据框结构,避免后续操作受到分组状态的影响。
运行后你会看到每个ID下的NA都被替换成了对应组的均值,比如ID1的NA变成150.5,ID2的NA变成175,ID3的NA变成197.6667,完全符合需求。
内容的提问来源于stack exchange,提问作者Dan W
相关产品推荐
相关产品推荐

