R语言如何按自定义规则对fs::dir_ls获取的文件排序
R语言自定义排序fs::dir_ls返回的文件列表
fs::dir_ls()默认按字母序返回文件,你可以通过自定义顺序向量匹配的方式实现指定规则的排序,针对你给出的12个LATO开头csv文件的排序需求,操作步骤如下:
- 第一步:获取目标文件时先关闭函数自带的默认排序,减少不必要的计算
library(fs) file_list <- dir_ls( path, regexp = paste0("LATO-", "[[:alpha:]]*", ".csv$"), type = "file" )
第二步:定义你需要的排序优先级,两种写法选一种即可:
- 直接写全文件名的目标顺序,适配性强不会匹配错
target_files <- c( "LATO-sty.csv", "LATO-lut.csv", "LATO-mar.csv", "LATO-kwi.csv", "LATO-maj.csv", "LATO-cze.csv", "LATO-lip.csv", "LATO-sie.csv", "LATO-wrz.csv", "LATO-paz.csv", "LATO-lis.csv", "LATO-gru.csv" )- 只提取月份缩写做匹配,代码更简洁
target_months <- c("sty", "lut", "mar", "kwi", "maj", "cze", "lip", "sie", "wrz", "paz", "lis", "gru")第三步:完成排序
如果你用全文件名匹配的方式,运行下面的代码:sorted_list <- file_list[order(match(path_file(file_list), target_files))]如果你用月份缩写匹配的方式,运行下面的代码:
file_month <- sub("LATO-([[:alpha:]]+)\\.csv$", "\\1", path_file(file_list)) sorted_list <- file_list[order(match(file_month, target_months))]
注意事项
path_file()是fs包自带的路径处理函数,可以跨系统准确提取路径末尾的纯文件名,避免Windows、Mac、Linux路径分隔符不同导致的匹配失败- 如果目录下存在符合正则规则但不在你自定义排序列表里的文件,这些文件会自动排在结果的最后,不会抛出错误
- 你给出的目标排序示例里
LATO-lip.csv后面用了中文顿号,写R代码的时候记得全部用英文标点分隔向量元素,避免语法错误
内容的提问来源于stack exchange,提问作者GrBa
相关产品推荐
相关产品推荐

