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

时间:2019-01-24 13:57:24

标签: r csv dplyr export

我想递归扫描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

将创建一个巨大的csv文件,该文件具有与模式匹配的所有文件-从所有目录并且不存储任何“目录名”特定列,以便我可以识别研究主题。

而且-即使一个文件很大,我的处理软件在每个参与者一个文件的基础上也能更好地工作。这就是为什么我想将与模式匹配的结果存储在单独的文件中,并为
添加其他列 -来自一个文件夹中的文件数量-通过将~read_table2()添加到<?php $elements = [1, 2, 3, 4]; function displ(&$el, $out = "") { if (count($el) === 0) { return $out; } elseif (count($el) > 3) { $i = 0; foreach ($el as $k=>$v) { $out .= "<div class=\"col-md-4\">" . $v . "</div>"; unset($el[$k]); $i++; if ($i === 3) { return displ($el, $out); } } return displ($el, $out); } elseif (count($el) < 3) { foreach ($el as $k=>$v) { $out .= "<div class=\"col-md-" . 12 / count($el) . "\">" . $v . "</div>"; unset($el[$k]); } return $out; } } echo displ($elements); 调用来工作
-文件夹名称(文件夹=主题)

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

1 个答案:

答案 0 :(得分:0)

我最终找到了解决方法:

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