R list.files()中的自然排序顺序(人类排序顺序)

时间:2013-01-24 07:52:38

标签: r natural-sort

是否有一种简单的方法可以按自然顺序对文件进行排序(也称为人类顺序),即file9.csv出现在file10.csv之前? list.files()似乎没有排序顺序的选项。

其他语言中有很多实现(例如here),而Rosetta Code只有C,Perl,Python等解决方案。

3 个答案:

答案 0 :(得分:6)

“人类排序”是一种疯子的错觉,仅适用于假设的人工智能系统,但只有具备适当的背景知识才能获得。

为此,您应该使用一些快速正则表达式从文件名中提取元数据并使用它们来订购文件:

files<-c("file9.txt","file10.txt");
as.numeric(gsub('^file([0123456789]*)\\.txt$','\\1',files))->fileNum;
files[order(fileNum)]

答案 1 :(得分:1)

您可以尝试将其命名为file09.csv ...

filenames <- paste0("file", 0:20, ".txt")
new_filenames <- sub("file([[:digit:]])\\.txt", "file0\\1\\.txt", filenames)
is_different <- new_filenames != filenames
file.rename(filenames[is_different], new_filenames[is_different])

答案 2 :(得分:1)

您可以使用mixedsort()包中的mixedorder()gtools,正如评论中@baptiste所指出的那样。