R语言按组合并数据框行并填充缺失值问题
按分组填充缺失值并保留唯一行的解决方案
你需要按record_id和instance分组,每组仅保留一行并填充其他列的缺失值。当前使用fill的代码完成了缺失值填充,但没有对分组后的重复行去重,补充步骤即可实现需求。
原始数据
mydata <- data.frame( record_id = c(1,1,1,1,1), instance = c(1,2,3,4,1), off_h = c(1,NA,0,0,0), off_c = c(NA,NA,0,0,0), off_p = c(NA,1,1,1,1) )
期望输出
record_id instance off_h off_c off_p 1 1 1 1 0 1 2 1 2 0 0 1 3 1 3 0 0 1 4 1 4 0 0 1
解决方法
方法1:填充后去重
先通过fill按分组双向填充缺失值,再用distinct保留每组的唯一行:
library(dplyr) library(tidyr) mydata %>% group_by(record_id, instance) %>% fill(off_h, off_c, off_p, .direction = "updown") %>% distinct(record_id, instance, .keep_all = TRUE)
方法2:分组聚合提取非缺失值
如果每组内的非缺失值是唯一的(同一分组下某列的非缺失值无冲突),可以直接对分组后的列提取非缺失值的第一个有效值:
mydata %>% group_by(record_id, instance) %>% summarise( across(c(off_h, off_c, off_p), ~first(na.omit(.x))), .groups = "drop" )
两种方法都能得到你想要的期望输出。
内容的提问来源于stack exchange,提问作者akang
相关产品推荐
相关产品推荐

