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

在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 12:45:49