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

求助:使用list.files()加载编号CSV文件时顺序错乱

解决CSV文件按数字顺序加载的问题

问题原因

list.files()默认按字符顺序排序文件名,字符比较中"10"会排在"2"前面(因为首字符"1"的ASCII码小于"2"),所以才会出现spec_cap1之后直接是spec_cap10、spec_cap11的情况。另外你用的正则spec_cap[1-77].csv是错误的——[]仅匹配单个字符范围,[1-77]实际只匹配"1"和"7"两个数字,根本无法覆盖1到77的所有文件。

解决方案1:提取文件名中的数字重新排序

通过正则提取文件名里的数字,转成整数后按数字大小排序:

# 获取所有符合命名规则的CSV文件
files <- list.files(pattern = "^spec_cap\\d+\\.csv$")

# 提取数字并按数字顺序排序文件列表
files_sorted <- files[order(as.integer(sub("spec_cap(\\d+)\\.csv", "\\1", files)))]

# 按正确顺序读取并合并文件
combined_files <- bind_rows(lapply(files_sorted, fread))

解决方案2:直接生成有序文件名列表

既然明确知道文件是spec_cap1到spec_cap77,直接按数字生成文件名更稳妥,还能检查文件是否存在:

# 生成1到77的有序文件名
files_sorted <- sprintf("spec_cap%d.csv", 1:77)

# 可选:检查文件是否存在,避免读取不存在的文件报错
missing_files <- files_sorted[!file.exists(files_sorted)]
if(length(missing_files) > 0) {
  warning(paste("缺失文件:", paste(missing_files, collapse = ", ")))
}

# 读取存在的文件并合并
combined_files <- bind_rows(lapply(files_sorted[file.exists(files_sorted)], fread))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 11:42:37