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

如何在R中批量加载多个Excel文件并解决合并时列类型不匹配问题

问题说明

你需要合并存放在data文件夹下的50个列名一致的Excel文件为单个dataframe,当前使用代码:

dir("data", full.names = T) %>% map_dfr(read_excel)

运行时报错:

Error: Can't combine ..1$Biaoti and ..26$Biaoti
已知所有文件的Biaoti列仅包含0或1,需要解决不同文件同列类型不一致导致的合并失败问题。

报错原因

read_excel默认会按单个文件的前几行内容推断列类型,不同文件的同列可能被识别为不同类型:比如前25个文件的Biaoti列被推断为数值型,第26个文件的Biaoti列可能因为存在空值、特殊单元格格式被识别为字符型/逻辑型,不同类型的列无法直接按行合并。

解决方案

方案1:读取时强制指定列类型(最稳妥)

先提前指定Biaoti列的类型为数值,其他列可保留自动推断,避免类型识别偏差:

library(readxl)
library(purrr)

# 读取第一个文件的表头,生成列类型配置
sample_path <- dir("data", full.names = TRUE)[1]
all_cols <- names(read_excel(sample_path, n_max = 0))
col_types <- rep("guess", length(all_cols))
names(col_types) <- all_cols
# 强制Biaoti列为数值型
col_types["Biaoti"] <- "numeric"

# 批量读取合并
dir("data", full.names = TRUE) %>% 
  map_dfr(~ read_excel(.x, col_types = col_types))

方案2:读取后统一转换列类型再合并

适合不确定其他列类型配置的场景,先读取每个文件单独转换Biaoti列类型后再合并:

library(readxl)
library(purrr)
library(dplyr)

dir("data", full.names = TRUE) %>% 
  map(function(path) {
    df <- read_excel(path)
    # 强制转换Biaoti列为数值,非0/1的异常值会转为NA
    df$Biaoti <- as.numeric(df$Biaoti)
    return(df)
  }) %>% 
  bind_rows()
补充说明

如果转换后出现异常NA值,可单独打开第26个Excel文件检查Biaoti列是否存在空格、特殊字符、非常规空值,清理后重新运行代码即可。

内容的提问来源于stack exchange,提问作者Muhammad Kamil

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 02:45:04