【问题标题】:How do I remove particular files from dir_ls?如何从 dir_ls 中删除特定文件?
【发布时间】:2025-12-02 23:20:17
【问题描述】:

我在“RawData”文件夹中有大量 .csv 数据文件,其中一些只是测试运行,我想在导入时忽略它们。这些文件在 R 之外很容易识别,我可以很容易地手动删除它们。但是,我希望我的整个分析过程对他人是透明的和可复制的;他们将直接从源下载这些无用的数据文件(以及真实的数据文件),并且能够看到我排除了哪些文件以及原因。

我的问题是:如何编辑我的 dir_ls 结果以忽略显式命名的文件?示例:如果dir_ls 的结果是“file1”、“file2”、“file3”、“file4”、“file5”,我如何将该列表编辑为“file1”、“file3”、“file4”。我有大约 400 个数据文件,所以我不能简单地命名我想要的文件。

data_dir <- "RawData/"              # Set main directory of data files. 
csv_file_list <- data_dir %>%       # For data directory...
  dir_ls(regexp = "\\.csv$")        # List all files that end with '.csv'...
  ** remove these file names: c("file_2", "file_4") from csv_file_list **

raw_data <- map_dfr(csv_file_list, ~read_csv(.x, col_types = cols(.default = "c")))

任何帮助表示赞赏! :)

【问题讨论】:

    标签: r directory tidyverse


    【解决方案1】:

    您可以使用setdiff 从字符向量中删除特定元素

    setdiff(csv_file_list, paste0('file_', c(2, 4), '.csv'))
    

    grep 删除包含特定模式的元素

    grep('^file_2|^file_4', csv_file_list, invert = TRUE, value = TRUE)
    

    【讨论】:

      【解决方案2】:

      使用dir_ls,您可以使用invert=TRUE,其中排除regexp匹配的文件——提供示例的解决方案:

      dir_ls(datadir, regexp = "(file2|file4)\\.csv", invert = TRUE)
      

      【讨论】: