代码之家  ›  专栏  ›  技术社区  ›  blazej

将多个文件夹中的多个文件保存为R中每个文件夹的一个文件

  •  0
  • blazej  · 技术社区  · 6 年前

    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")
    }
    

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

    谢谢你的帮助

    1 回复  |  直到 6 年前
        1
  •  0
  •   blazej    6 年前

    我最终找到了自己的方法:

    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)
    }