在R中将多份.txt文件合并为.csv时遇行数不匹配报错求助
问题解决:将多个TXT文件合并为带文件名和内容的CSV
错误原因
报错arguments imply differing number of rows: 10, 150194的核心问题是:
basename(myfiles)对应10个文件名(即你测试的10个文件)unlist(mytxts)是所有文件的行拼接后的总条数(共150194行)
创建数据框时两个向量长度不匹配——你的需求是每个文件对应一行(包含文件名和整个文件的文本内容),但原代码把每行文本都拆成了单独条目,导致行数不匹配。
修正后的代码
txt2csv <- function(my_dir, mycsvfilename) { # 获取目标目录下所有txt文件的完整路径 myfiles <- list.files(my_dir, full.names = TRUE, pattern = "\\.txt$") # 读取每个文件的全部内容,将多行合并为单个字符串(保留换行符) mytxts <- lapply(myfiles, function(file) { lines <- readLines(file, warn = FALSE) paste(lines, collapse = "\n") }) # 创建匹配行数的数据框:每个文件名对应一个完整文本内容 mytxtsdf <- data.frame( filename = basename(myfiles), fulltext = unlist(mytxts), stringsAsFactors = FALSE ) # 直接构建输出路径,避免切换工作目录引发的路径问题 output_path <- file.path(my_dir, paste0(mycsvfilename, ".csv")) write.table(mytxtsdf, file = output_path, sep = ",", row.names = FALSE, col.names = TRUE, quote = TRUE) # 输出生成成功的提示信息 message(paste("合并完成,文件路径:", output_path)) }
关键改动说明
- 修正参数名错误:原代码
list.files(mydir)改为list.files(my_dir),与函数定义的参数名一致 - 调整文件读取逻辑:用
paste(lines, collapse = "\n")把单个文件的所有行合并成一个字符串,确保文件名和文本内容的数量完全匹配 - 移除不必要的
setwd操作:改用file.path直接构建输出路径,避免切换工作目录导致的路径混乱 - 优化CSV写入设置:开启
col.names = TRUE保留表头,设置quote = TRUE避免文本中的逗号破坏CSV格式 - 修复提示信息的变量错误:用传入的
mycsvfilename替代未定义的newspapers_csv_file
使用示例
# 替换为你的实际目录和输出文件名 txt2csv(my_dir = "C:/你的TXT文件存放目录", mycsvfilename = "合并结果")
内容的提问来源于stack exchange,提问作者eriskar
相关产品推荐
相关产品推荐

