如何通过迭代函数一步完成R语言多xls数据集导入及正确合并?
错误原因
你直接调用purrr::map_df()对所有6个文件做行绑定,不符合你原有处理逻辑,存在两个核心问题:
- 带M和带N的数据集列结构不一致,直接行绑会自动补全缺失列为NA,数据结构完全混乱
- 你原有逻辑是同标识(M/N)的3个文件先行合并,再按公共主键做关联合并,全量行绑没有实现关联匹配的步骤
调整后代码
可实现一步导入+符合你原有逻辑的合并:
library(tidyverse) library(readxl) final_data <- list.files(pattern = "^AA.*\\.xls$") %>% # 构造文件路径和分组标识映射表 tibble(file_path = .) %>% mutate(group_flag = str_extract(file_path, "AA-([MN])-", group = 1)) %>% # 同分组内先行合并 group_by(group_flag) %>% summarise(group_data = list(map_df(file_path, read_excel))) %>% # 拆分两组数据后按公共主键关联 pivot_wider(names_from = group_flag, values_from = group_data) %>% { inner_join(.$M[[1]], .$N[[1]], by = c("SAMPLE", "GROUP", "SESSION", "CATEGORY")) }
注意事项
- 如果M和N表的主键列名不一致,需要修改
inner_join的by参数为键值对格式,例如by = c("GP" = "GROUP", "BLOCK" = "SESSION"),保证列名一一对应 - 若你需要保留未匹配的行,可将
inner_join替换为full_join/left_join/right_join匹配你的合并需求
内容的提问来源于stack exchange,提问作者12666727b9
相关产品推荐
相关产品推荐

