如何使用purrr包map系列函数读取并合并三组Excel文件列表
实现方案
核心使用purrr::pmap_dfr完成多列表对应位置的并行迭代,适配你3组文件的合并需求,操作前需确保filesl、filesr、filesv长度完全一致,且相同索引位置的三个文件为需要配对处理的一组。
注意你原有代码中的rbind.data.frame本身不支持by参数,按你的使用场景可以选择以下两种写法:
场景1:按指定列对齐合并三个文件
若你需要按ID/GR/SES/COND四个公共列匹配合并三组数据,使用全连接逻辑的代码如下:
library(purrr) library(dplyr) library(readxl) data <- pmap_dfr(list(filesl, filesr, filesv), function(l_path, r_path, v_path) { # 读取同组三个文件 ldat <- read_excel(l_path) rdat <- read_excel(r_path) vdat <- read_excel(v_path) # 按指定公共列逐步合并 temp_join <- full_join(ldat, rdat, by = c('ID', 'GR', 'SES', 'COND')) final_join <- full_join(temp_join, vdat, by = c('ID', 'GR', 'SES', 'COND')) return(final_join) })
场景2:三组文件列结构一致,直接行拼接
如果所有文件的列结构完全相同,仅需要按行堆叠数据,可以简化写法:
data <- pmap_dfr(list(filesl, filesr, filesv), ~ { dplyr::bind_rows(read_excel(..1), read_excel(..2), read_excel(..3)) })
pmap中..1对应第一个列表filesl的元素,..2对应第二个列表filesr的元素,..3对应第三个列表filesv的元素,顺序可以根据你的需求调整。
内容的提问来源于stack exchange,提问作者12666727b9
相关产品推荐
相关产品推荐

