You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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"
)
  • 第二步:定义你需要的排序优先级,两种写法选一种即可:

    1. 直接写全文件名的目标顺序,适配性强不会匹配错
    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"
    )
    
    1. 只提取月份缩写做匹配,代码更简洁
    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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 05:39:21