R语言如何基于指定数据框的公共id合并多个数据框
R多数据框按指定id合并解决方案
正确实现代码
library(dplyr) library(tidyr) # 提取data3中作为筛选标准的id target_ids <- unique(data3$id) # 合并处理 combined <- list(data1 = data1, data2 = data2, data3 = data3) %>% # 合并所有数据框,新增source列标记数据来源 bind_rows(.id = "source") %>% # 仅保留data3中存在的id对应的数据 filter(id %in% target_ids) %>% # 补全每个id对应三个数据集的组合,缺失的x值自动填充NA complete(id, source) %>% # 按id、数据集来源排序,保证输出顺序和预期一致 arrange(id, source) %>% # 移除不需要的source列 select(id, x)
运行上述代码后,combined的输出和要求的预期结果完全一致:
id x 1 1 10 2 1 NA 3 1 30 4 3 14 5 3 22 6 3 32
原代码错误原因
之前的代码存在两处核心问题:
bind_rows()的.id参数作用是为每个输入的数据框生成专属标识作为新列的值,会覆盖原有数据中的id列,完全不符合合并逻辑- 没有提前过滤掉
data3中不存在的id(即id=2的所有记录),也没有补全每个目标id对应三个数据集的缺失值
内容的提问来源于stack exchange,提问作者JontroPothon
相关产品推荐
相关产品推荐

