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

如何在R中按数字正序批量读取有序命名的TXT格式文件

R读取数字序号命名文件乱序解决方案

问题根因

R的list.files()默认按照字符字典序排序,逐位对比字符时,file10.txt的第一位数字为1,优先级高于首数字为2的file2.txt,因此会出现顺序错乱的情况。

解决方案

方案1:提取序号重排序(无需额外安装冷门依赖)

从文件名中提取数字序号后按数值排序,后续读取即可严格遵循1-1000的顺序,还可直接生成文件序号列方便匹配:

library(data.table)
library(stringr)

# 原逻辑获取文件列表
list_of_files <- list.files(path = ".", recursive = TRUE,
                            pattern = "\\.txt$", 
                            full.names = TRUE)

# 提取文件名中的数字序号,按数值重排序文件列表
file_nums <- as.integer(str_extract(list_of_files, "(?<=file)\\d+(?=\\.txt)"))
list_of_files_sorted <- list_of_files[order(file_nums)]

# 按排序后的列表读取文件
DT <- rbindlist(sapply(list_of_files_sorted, fread, simplify = FALSE),
                use.names = FALSE, idcol = "FileName")

# 可选:新增文件序号列,无需依赖读取顺序也能直接匹配文件编号
DT[, file_id := as.integer(str_extract(FileName, "(?<=file)\\d+(?=\\.txt)"))]

方案2:用自然排序函数直接处理

如果已安装gtools包,可直接调用内置的自然排序方法:

library(data.table)
library(gtools)

# 直接用mixedsort做自然排序,得到按数字顺序排列的文件列表
list_of_files <- mixedsort(list.files(path = ".", recursive = TRUE,
                                      pattern = "\\.txt$", 
                                      full.names = TRUE))

# 后续读取逻辑和原代码一致
DT <- rbindlist(sapply(list_of_files, fread, simplify = FALSE),
                use.names = FALSE, idcol = "FileName")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 07:51:00