簡體   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