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

如何用R批量读取无分隔符无表头TXT文件并合并为数据框?

解决批量读取固定宽度TXT文件并合并的问题

咱们先定位你代码里的核心问题:你定义的myfile是单个文件的路径字符串,而lapply(myfile, ...)会把这个字符串拆成单个字符逐个遍历,这就导致fn被赋值成/、P这类单个字符,自然会报错找不到文件。

接下来给你完整的分步解决方案:

步骤1:获取所有目标TXT文件的路径列表

先把文件夹里160个TXT文件的路径一次性提取出来,用list.files函数就能轻松搞定:

# 设置文件所在的文件夹路径
file_dir <- "//PATH/AllFiles/"
# 获取所有.txt后缀的文件完整路径,避免混入其他类型文件
file_list <- list.files(path = file_dir, pattern = "\\.txt$", full.names = TRUE)

这里pattern = "\\.txt$"是正则表达式,确保只匹配后缀为.txt的文件;full.names = TRUE会返回包含完整路径的文件名,方便后续直接读取。

步骤2:批量读取并合并文件

现在用lapply遍历刚才生成的文件列表,同时修正你的read.fwf参数(我核对过,你给出的列宽和列名数量完全匹配,没问题):

# 提前定义固定宽度和列名,方便后续维护
col_widths <- c(5,20,8,2,20,8,2,40,29,2,5,4,8,1,6,1,9,1,9)
col_names <- c("NUM","YNUM","STREETNUM","STREETPRED","STREETNAME","STREETTYPE","STREETPOSTD","STREETADD2","CITY", "STATE","ZIP","ZIP4","EFFDATE","TYPE", "PREMIUM","FILL", "VAMOUNT","FILLS","OVAMOUNT")

# 批量读取并合并,同时添加文件名列方便后续溯源
CompleteDataCollection <- do.call(rbind, lapply(file_list, function(fn) {
  # 读取单个固定宽度文件
  df <- read.fwf(fn, widths = col_widths, header = FALSE, col.names = col_names)
  # 添加文件名列(用basename只保留文件名,去掉路径)
  df$Filename <- basename(fn)
  return(df)
}))

效率优化建议

如果文件数量多、体积大,do.call(rbind, ...)的合并效率会偏低,推荐用以下两种更快的方式:

方式1:用tidyverse的purrr::map_dfr

library(purrr)

CompleteDataCollection <- map_dfr(file_list, function(fn) {
  df <- read.fwf(fn, widths = col_widths, header = FALSE, col.names = col_names)
  df$Filename <- basename(fn)
  df
})

方式2:用data.table的rbindlist

library(data.table)

CompleteDataCollection <- rbindlist(lapply(file_list, function(fn) {
  df <- read.fwf(fn, widths = col_widths, header = FALSE, col.names = col_names)
  df$Filename <- basename(fn)
  as.data.table(df)
}))

额外注意事项

  • 确保所有160个文件的固定宽度完全一致,如果有个别文件格式异常,会导致读取失败,建议先抽查几个文件验证格式。
  • 如果文件体积很大,推荐用readr::read_fwf(tidyverse工具),它支持进度条,读取速度比基础包的read.fwf更快:
library(readr)
CompleteDataCollection <- map_dfr(file_list, function(fn) {
  df <- read_fwf(fn, fwf_widths(col_widths, col_names))
  df$Filename <- basename(fn)
  df
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 12:52:52