如何用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
相关产品推荐
相关产品推荐

