合并DataFrame并补全缺失ID:使用dplyr/tidyr遇阻求助
嘿,我完全懂你要实现的效果!就是要把full里所有的分组-ID组合对应补到problem里,缺的那些行自动填上NA作为target值对吧?用dplyr+tidyr其实超简单,我给你一步步来:
首先先把你提到的示例数据写出来(方便大家复现):
library(dplyr) library(tidyr) # 你提供的问题数据集 problem <- tibble( group = c(1,1,2,2), id = c(1,2,1,3), target = c(10,20,30,40) ) # 完整的ID参照数据集 full <- tibble( group = c(1,1,1,2,2,2), id = c(1,2,3,1,2,3) )
核心解决方案:用完整基准表做左连接
关键思路就是以full作为完整的分组-ID组合基准,和problem做左连接,这样所有full里的行都会被保留,匹配到的target会自动填充,没匹配到的(也就是你说的缺失记录)就会自动设为NA,完美符合你的需求:
# 生成最终结果 final_result <- full %>% left_join(problem, by = c("group", "id")) # 查看结果 final_result
运行后得到的就是你想要的输出:
# A tibble: 6 × 3 group id target <dbl> <dbl> <dbl> 1 1 1 10 2 1 2 20 3 1 3 NA 4 2 1 30 5 2 2 NA 6 2 3 40
为什么之前的连接没成功?
估计你之前可能用了inner_join(只保留两边都有的行)或者right_join(以problem为基准),这些都没法保留full里的完整组合。而left_join是以第一个表(也就是full)为基准,刚好能覆盖所有需要的分组-ID对,自动补全缺失的target为NA。
内容的提问来源于stack exchange,提问作者schultem
相关产品推荐
相关产品推荐

