使用 list.files() 加载多个 csv 文件的顺序问题

Issue with order of loading multiple csv files using list.files()

提问人:Kieran 提问时间:8/25/2023 更新时间:8/25/2023 访问量:25

问:

我正在尝试加载一长串csv文件,名称spec_cap1,spec_cap2...,spec_cap77。在我的目录中,它们的顺序正确。我目前正在尝试使用

files <- list.files(pattern = "*.csv")
files

combined_files <- bind_rows(lapply(files, fread))
combined_files

当我这样做时,我得到了文件,但它们是无序的 - R 读取 spec_cap1,然后是 spec_cap10、spec_cap11等,然后是 spec_cap2、spec_cap21。

我尝试使用以下方法指定确切的文件:

files <- list.files(pattern = "spec_cap[1-77].csv")
files

combined_files <- bind_rows(lapply(files, fread))
combined_files

但我遇到了同样的问题。任何帮助都非常感谢!

R CSV 文件

评论

0赞 neilfws 8/25/2023
这是预期的行为,文件名按其字符串值排序,而不是按数字部分排序。阅读它们的顺序对你想做的事情有什么影响吗?如果改用,你将获得一个包含文件路径的列,您可以将其用作标识符。combined_files <- readr::read_csv(files, id = "path")

答:

2赞 LMc 8/25/2023 #1

首先对文件名进行排序,然后将其读入:

files <- c("spec_cap1", "spec_cap10", "spec_cap11", "spec_cap2", "spec_cap21")
files <- stringr::str_sort(files, numeric = TRUE)
# [1] "spec_cap1"  "spec_cap2"  "spec_cap10" "spec_cap11" "spec_cap21"

str_sort在以下情况下,从包中将对数值而不是字符串值进行排序stringrnumeric = TRUE