使用R批量提取多Excel第4列合并及长度不匹配报错解决问询
问题根因
报错number of rows of result is not a multiple of vector length的核心原因如下:
- 不同文件的第4列行数不一致,
cbind函数要求所有参与合并的向量长度完全相同,强行合并就会触发长度不匹配报错 - 你的需求是将所有列纵向堆叠为单列,但原代码用
cbind做横向合并,逻辑本身不符合需求 - 额外说明:你提到处理的是Excel文件,但原代码读取的是csv格式,若实际是xlsx/xls格式需要调整读取函数
修复后实现代码
第一步:安装并加载依赖包
处理Excel文件使用readxl,批量合并使用purrr简化代码:
# 首次运行先安装依赖 install.packages(c("readxl", "dplyr", "purrr")) # 加载包 library(readxl) library(dplyr) library(purrr)
第二步:批量读取并合并数据
# 设置工作目录 setwd("你的文件所在文件夹路径") # 获取文件夹下所有Excel文件(如果是csv格式就把后缀换成*.csv) file_names <- list.files(pattern = "*.xlsx") # 批量读取+提取第4列+堆叠合并 result <- map_dfr(file_names, function(file) { # 读取Excel文件第一个工作表(如果是csv就换成read.csv(file, header = T)) df <- read_excel(file, sheet = 1) # 提取第4列,新增第二列存储对应表头/所属文件标识,此处示例存原第4列的列名,也可以换成文件名file data.frame( 数值 = df[[4]], 对应表头 = colnames(df)[4] ) }) # 导出结果到新文件 write.csv(result, "合并结果.csv", row.names = F, fileEncoding = "utf-8")
代码说明
- 用
map_dfr直接做行绑定堆叠,不管每个文件的第4列有多少行都可以正常合并,不会触发长度不匹配报错 - 第二列默认存原文件第4列的列名,如果你需要存所属的文件名,把
colnames(df)[4]换成file即可 - 如果你的文件是csv格式,把读取函数从
read_excel换成read.csv,后缀匹配规则换成*.csv即可
内容的提问来源于stack exchange,提问作者Cordyline
相关产品推荐
相关产品推荐

