簡體   English   中英

R list.files()中的自然排序順序(人類排序順序)

[英]Natural sort order (human sort order) in R list.files()

是否有一種簡單的方法按自然順序(也稱為人類順序)對文件進行排序,即file9.csv出現在file10.csv之前? list.files()似乎沒有排序順序的選項。

其他語言有很多實現(例如這里 ), Rosetta Code只有C,Perl,Python等解決方案。

“人類排序”是一種瘋狂的幻覺,僅在假設的人工智能系統上可用,但只有具備適當的背景知識。

為此,您應該使用一些快速正則表達式從文件名中提取元數據並使用它們來訂購文件:

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

您可以嘗試將其命名為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])

您可以使用mixedsort()mixedorder()從包裝gtools ,正如指出的@baptiste中的注釋。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM