我想递归扫描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);
调用来工作
-文件夹名称(文件夹=主题)
我觉得我已经接近了,但是这里仍然缺少一些要点。 感谢您的帮助
答案 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)
}