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

如何用R合并单列Excel文件并以源文件名命名列?求助修复失效代码

问题分析与解决方案

核心问题

你的代码生成空文件的关键原因是用错了读取文件的函数:read.table()是用来读取纯文本文件(如.txt、.csv)的,无法解析.xlsx格式的Excel文件,所以实际没有读入任何有效数据,最终输出空文件。

修正后的完整代码

我们改用readxl包的read_excel()来读取Excel文件,同时调整逻辑跳过表头、设置列名,确保数据正确合并:

# 安装并加载所需包
if (!require(readxl)) install.packages("readxl")
if (!require(dplyr)) install.packages("dplyr")
if (!require(writexl)) install.packages("writexl")

# 获取当前目录下所有xlsx文件的完整路径
fileList <- list.files(".", pattern = "\\.xlsx$", full.names = TRUE)

# 定义读取函数:跳过原表头"Distance",列名直接用文件名(去掉后缀)
read_excel_data <- function(file_path) {
  col_name <- gsub("\\.xlsx$", "", basename(file_path))
  # 从第2行开始读取,跳过第一行的"Distance"表头
  read_excel(file_path, skip = 1, col_names = col_name)
}

# 批量读取所有Excel文件
data_list <- lapply(fileList, read_excel_data)

# 按列合并所有数据,行数不足的自动补NA对齐
merged_data <- bind_cols(data_list)

# 将合并结果写入新Excel文件
write_xlsx(merged_data, "Result.xlsx")

关键修正点说明

  • 替换读取函数:用read_excel()替代read.table(),专门处理Excel格式文件,能正确解析.xlsx内容
  • 跳过冗余表头:通过skip = 1直接跳过原文件的"Distance"行,不用后续再处理表头
  • 直接设置列名:读取时就把文件名(去掉.xlsx后缀)设为列名,一步到位
  • 按列合并数据:bind_cols()直接将各文件的数据列并排拼接,自动用NA填充行数不足的列,完全匹配你要的效果

额外提示

  • 如果个别Excel文件有格式异常(比如隐藏行、空行),可以在read_excel()里加range参数指定读取范围
  • 可以先单独测试一个文件的读取结果,确认数据正确后再批量处理所有文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 22:20:24