如何在R中按多列合并多个data frame?
多数据框多列合并解决方案
要实现多列匹配合并多个数据框,只需调整full_join的by参数为包含所有匹配列的向量即可,无需改动整体的reduce逻辑,具体操作如下:
步骤1:指定所有匹配列
先把需要用来匹配的列名整理成字符向量,比如你需要按Facility.ID、Facility.Name、State三列匹配,就定义:
match_cols <- c("Facility.ID", "Facility.Name", "State")
注意:要确保所有数据框中这些列的列名完全一致,且数据类型相同(比如都是字符型或数值型),避免匹配失败。
步骤2:修改合并代码
将原代码中的by="Facility.ID"替换为上面定义的向量,完整代码如下:
library(dplyr) library(purrr) merge_data1 <- list(hos_2015_data, hos_2016_data, hos_2017_data, hos_2018_data, hos_2019_data, hos_2020_data, hos_2021_data) merged_result1 <- merge_data1 %>% reduce(full_join, by = match_cols) View(merged_result1)
reduce会依次将列表中的每个数据框与之前合并的结果执行full_join,这样就能按指定多列把所有数据框的行合并到一起,同时保留所有行(无论某个数据框是否有对应匹配项)。
额外实用技巧
- 若不确定哪些列是所有数据框共有的,可以用
Reduce+intersect批量获取:# 提取所有数据框的共同列名 common_cols <- Reduce(intersect, lapply(merge_data1, colnames)) # 从共同列中筛选需要用来匹配的列 match_cols <- common_cols[c("Facility.ID", "Facility.Name")] # 按需选择 - 合并后若出现重复列(不同数据框中同列名但值不同),
full_join会自动添加.x、.y后缀,你也可以通过suffix参数自定义后缀,比如suffix = c("_prev", "_curr"),不过多数据框依次合并时,后缀会按合并顺序生成。
内容的提问来源于stack exchange,提问作者OFay
相关产品推荐
相关产品推荐

