使用R语言multmerge()函数合并文件时数据丢失的解决方法
问题排查与解决方法
核心问题分析
DescTools::multmerge的默认行为存在局限性,比如仅读取每个Excel文件的第一个工作表、对表头格式不一致的文件处理逻辑苛刻,这些都可能导致数据丢失。以下是更可控的替代方案及排查步骤:
步骤1:用手动流程替代multmerge
使用readxl包实现批量读取与合并,能精准控制每个文件的所有工作表:
# 加载依赖包 library(readxl) # 列出文件夹内所有Excel文件(仅匹配.xlsx/.xls格式) file_paths <- list.files( path = "~/OneDrive - The Ohio State University/3. PROJECTS/X PROJECT/AU21/ES P1200 Raw Survey Data Ungraded/AU21Unit3", pattern = "\\.xlsx$|\\.xls$", full.names = TRUE ) # 定义函数:读取单个文件的所有工作表并合并 read_all_sheets <- function(file) { sheet_names <- excel_sheets(file) sheet_data_list <- lapply(sheet_names, function(sheet) { read_excel(file, sheet = sheet) }) do.call(rbind, sheet_data_list) } # 批量读取所有文件并合并成最终数据框 all_data_list <- lapply(file_paths, read_all_sheets) Unit3 <- do.call(rbind, all_data_list) # 验证行数 nrow(Unit3)
步骤2:排查原方法失效原因
检查表头一致性:
multmerge会自动丢弃列名不匹配的行/列,执行以下代码确认所有文件的列名是否完全一致:lapply(all_data_list, colnames)若存在差异,需统一所有文件的列名后再合并。
检查文件范围:确认文件夹内无非Excel格式文件,
multmerge可能错误读取无关文件导致数据截断,用list.files的pattern参数可避免此问题。定位异常文件:逐文件统计总行数,确认哪个文件未被正确读取:
file_row_counts <- sapply(file_paths, function(file) { sheet_names <- excel_sheets(file) sum(sapply(sheet_names, function(s) nrow(read_excel(file, sheet = s)))) }) file_row_counts将所有文件的行数求和,确认是否等于204,快速定位问题文件。
内容的提问来源于stack exchange,提问作者Ariana
相关产品推荐
相关产品推荐

