如何用dplyr按组填充同一变量中的缺失值
问题描述
现有如下数据集,希望按variable分组,用每组中un2的非缺失值填充该组内所有un2的缺失值,最终得到desired-result-for-un2列的效果:
variable value un2 n prop desired-result-for-un2 <chr> <fct> <fct> <int> <dbl> <fct> 1 CHR_01 Never 0 2 1 0 2 CHR_01 Almost Never NA 0 0 0 3 CHR_01 Sometimes NA 0 0 0 4 CHR_01 Often NA 0 0 0 5 CHR_01 Almost Always NA 0 0 0 6 CHR_011 Never 1 1 0.5 1 7 CHR_011 Almost Never 1 1 0.5 1 8 CHR_011 Sometimes NA 0 0 1 9 CHR_011 Often NA 0 0 1 10 CHR_011 Almost Always NA 0 0 1 11 CHR_02 Never 0 1 0.5 0 12 CHR_02 Almost Never 0 1 0.5 0
dplyr实现方案
以下两种方法均可实现需求,根据习惯选择即可:
方法一:使用fill()函数
利用fill()的方向填充特性,结合分组操作,可快速覆盖组内所有缺失值:
library(dplyr) df_filled <- df %>% group_by(variable) %>% fill(un2, .direction = "downup") %>% # 先向下填充再向上填充,确保无遗漏 ungroup()
方法二:提取组内唯一非缺失值赋值
若确定每组的非缺失un2值唯一,可直接提取该值赋值给组内所有行:
library(dplyr) df_filled <- df %>% group_by(variable) %>% mutate(un2 = first(na.omit(un2))) %>% # 取组内第一个非缺失值(组内非缺失值一致) ungroup()
两种方法最终结果均与desired-result-for-un2列一致,且会保留un2原有的因子类型。
内容的提问来源于stack exchange,提问作者marc
相关产品推荐
相关产品推荐

