在R语言中如何按分组填充分类变量的缺失值?
分组替换分类变量缺失值的高效方法
针对大型数据集里按分组填充分类变量NA的需求,以下两种方法无需手动指定每个分组,能高效完成数据清洗:
方法一:替换为组内出现频率最高的值(众数)
先定义一个取众数的辅助函数,再结合dplyr分组处理:
# 定义取众数的函数(自动忽略NA) get_mode <- function(x) { ux <- unique(na.omit(x)) ux[which.max(tabulate(match(x, ux)))] } library(dplyr) # 按name分组替换NA为组内众数 d_clean_mode <- d %>% group_by(name) %>% mutate(pos = ifelse(is.na(pos), get_mode(pos), pos)) %>% ungroup()
该方法适合组内存在多个非NA值的场景,会自动选择出现次数最多的类别填充NA。
方法二:替换为组内首次出现的非NA值
如果只需用组内第一个出现的有效标签填充,代码更简洁:
library(dplyr) # 按name分组替换NA为组内首个非NA值 d_clean_first <- d %>% group_by(name) %>% mutate(pos = ifelse(is.na(pos), first(na.omit(pos)), pos)) %>% ungroup()
两种方法都能批量处理所有分组,完全替代繁琐的case_when(),适配包含大量唯一name的大型数据集。
内容的提问来源于stack exchange,提问作者user13973103
相关产品推荐
相关产品推荐

