繁体   English   中英

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

[英]Save multiple files in many folders as one file per folder in R

我想递归扫描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文件,其中包含与该模式匹配的所有文件-从所有目录开始,并且不存储任何“目录名”特定列,以便我可以识别研究主题。

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

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

我最终找到了解决方法:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM