6

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

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

4

3 回答 3

8

“人类分类”是疯子的错觉,仅在假设的 AI 系统上可用,但只有在具有适当的上下文知识时才可用。

为此,您应该使用一些快速的正则表达式从文件名中提取元数据并使用它们对文件进行排序:

files<-c("file9.txt","file10.txt");
as.numeric(gsub('^file([0123456789]*)\\.txt$','\\1',files))->fileNum;
files[order(fileNum)]
于 2013-01-24T08:38:38.857 回答
2

您可以尝试将其命名为 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])
于 2013-01-24T07:56:53.543 回答
2

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

于 2016-03-05T22:52:07.987 回答