You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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:排查原方法失效原因

  1. 检查表头一致性:multmerge会自动丢弃列名不匹配的行/列,执行以下代码确认所有文件的列名是否完全一致:

    lapply(all_data_list, colnames)
    

    若存在差异,需统一所有文件的列名后再合并。

  2. 检查文件范围:确认文件夹内无非Excel格式文件,multmerge可能错误读取无关文件导致数据截断,用list.files的pattern参数可避免此问题。

  3. 定位异常文件:逐文件统计总行数,确认哪个文件未被正确读取:

    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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 11:22:34