【问题标题】:Selectively reading in csv files in R where filenames don't end in a particular suffix在 R 中选择性地读取文件名不以特定后缀结尾的 csv 文件
【发布时间】:2021-09-12 19:43:55
【问题描述】:

我有一个来自实验的 csv 文件文件夹,我想将其读入 R 进行分析。该文件夹包含每个参与者的两个文件,文件名遵循以下模式:

"participantID.csv"
"participantID_debrief.csv"

我想在 R 中创建两个变量,一个用于标准数据文件,一个用于汇报文件。我找到了 list.files 函数,并看到使用它的标准方法是:

files <- list.files(path="D:/data", pattern=".csv")

但我想使用模式参数首先只匹配以“_debrief.csv”结尾的文件名,然后只匹配的文件名。我将如何编写正则表达式(假设这就是模式)来实现这一点?

【问题讨论】:

    标签: r regex csv filenames


    【解决方案1】:

    对于 tidyverse 方法,您可以使用 fs 库 (https://www.tidyverse.org/blog/2018/01/fs-1.0.0/)。

    base_dir = 'D:/data/'
    file_list_debrief = fs::dir_ls(base_dir, glob = '*_debrief.csv$')
    file_list_non_debrief = fs::dir_ls(base_dir, glob = '*_debrief.csv$', invert = TRUE)
    

    【讨论】:

      【解决方案2】:

      试试:

      files = list.files(path="D:/data")
      non_debrief = files[!grepl("_debrief.csv", files)]
      debrief = files[grepl("_debrief.csv", files)]
      

      【讨论】:

      • 这似乎不起作用 - 我得到了 non_debrief 中的所有文件名,而 debrief 是空的。但是,我确实设法将其用作模板来制定以下解决方案:all_files &lt;- list.files(path="./pilot_1")data_files &lt;- all_files[!grepl("_debrief.csv", all_files)]debrief_files &lt;- all_files[grepl("_debrief.csv", all_files)]所以谢谢!
      • 嗯,好的 - 你能看到编辑吗?如果有效?
      • 是的,我认为这与我在上面评论中的逻辑相同。非常感谢 - grepl 正是我所需要的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 2017-01-27
      相关资源
      最近更新 更多