【问题标题】:Save multiple files in many folders as one file per folder in R将多个文件夹中的多个文件保存为 R 中每个文件夹一个文件
【发布时间】:2019-06-18 06:54:25
【问题描述】:

我想递归扫描getwd() 中的所有文件夹,选择匹配模式的文件夹,将文件夹名称添加为新的subject 列,并为每个文件夹编写一个.csv

到目前为止,我设法做到了以下几点,但它仅适用于手动切换文件夹:

library(tidyverse)

dir <- "AP4T/"     
APT4 <-
list.files(path = dir, pattern = "*_PULS.log") %>%
map_df(~read_table2(., skip = 5), .id="file") %>%
select(-CHANNEL, -SIGNAL)

write_csv2(APT4, path = "APT4T/resp.csv") 

虽然这些代码有效,但我很难手动更改数百个文件夹,我相信有一种方法可以自动化它,但不知道如何。

例如:

dir<-list.dirs(, full.names = T, recursive = T)
for(i in dir){
  list.files(path = dir, pattern = "*_RESP.log", full.names = T) %>%
    map_df(~read_table2(., skip = 5), .id="file") %>%
    select(-CHANNEL, -SIGNAL) %>%
    write_csv(., path = "resp.csv")
}

将创建一个巨大的 csv 文件,其中包含与模式匹配的所有文件 - 来自所有目录并且不存储任何“目录名称”特定列,以便我可以识别研究对象。

另外 - 即使单个文件也很大,我的处理软件在每个参与者一个文件的基础上工作得更好。这就是为什么我想将与模式匹配的结果存储在单独的文件中,并带有额外的列 for
- 一个文件夹中的文件数 - 通过将.id="file 添加到~read_table2() 调用
- 文件夹名称(文件夹 = 主题)

我觉得我已经很接近了,但这里仍然缺少一些要点。 感谢您的帮助

【问题讨论】:

    标签: r csv dplyr export


    【解决方案1】:

    我最终找到了这样做的方法:

    library(tidyverse)
    
    # save list of all directories in main/ folder
    
    dir <-list.dirs (path = "main", full.names = T, recursive = T)
    
    #remove 1st item as it points to main directory
    
    dir <- dir[2:73]
    
    # loop over all directories and aggregate files containing "_RESP"
    
    for(i in 1:length(dir))
    {
    di <- dir[i]
    
    df<-list.files(path = di, pattern = "*_RESP.log", full.names = T) %>%
      map_df(~read_table2(., skip = 5), .id="file")
    
    # Store each merge in separate files with folder as file name
    
    write.csv(df, file = paste0(di,"_RESP",".csv"), row.names = FALSE)
    }
    

    【讨论】:

      猜你喜欢
      • 2018-08-06
      • 1970-01-01
      • 2020-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-23
      相关资源
      最近更新 更多