【问题标题】:Loop through subfolders and extract data from CSV files遍历子文件夹并从 CSV 文件中提取数据
【发布时间】:2018-03-30 09:30:25
【问题描述】:

我正在尝试遍历我的 wd 的所有子文件夹,列出它们的名称,在每个子文件夹中打开“data.csv”并从该 csv 文件中提取第二个和最后一个值。

df 看起来像这样:

Name_folder_1   2nd value   Last value
Name_folder_2   2nd value   Last value
Name_folder_3   2nd value   Last value

现在,我设法列出了子文件夹和每个文件(感谢这个线程:read multiple text files from multiple folders),但我很难实现(我猜应该是)一个嵌套循环来读取和提取数据csv 文件。

parent.folder <- "C:/Users/Desktop/test"
setwd(parent.folder)

sub.folders1 <- list.dirs(parent.folder, recursive = FALSE)
r.scripts <- file.path(sub.folders1)

files.v <- list()
for (j in seq_along(r.scripts)) {
  files.v[j] <- dir(r.scripts[j],"data$")
}

任何提示将不胜感激!

编辑:

我正在尝试下面详述的解决方案,但一定有我遗漏的东西,因为它运行平稳但没有产生任何东西。这可能是非常愚蠢的事情,我是 R 新手,学习曲线让我头晕目眩:p

  lapply(files, function(f) {
  dat <- fread(f) # faster
  dat2 <- c(basename(dirname(f)), head(dat$time, 1), tail(dat$time, 1))
  write.csv(dat2, file = "test.csv")
})

【问题讨论】:

    标签: r


    【解决方案1】:

    不容易复制,但这是我的建议:

    library(data.table)
    files <- list.files("PARENTDIR", full.names = T, recursive = T, pattern = ".*.csv")
    
    lapply(files, function(f) {
      dat <- fread(f) # faster
      # Do whatever, get the subfolder name for example
      basename(dirname(f))
    })
    

    您可以简单地递归查找父目录中的所有 CSV 文件,仍然可以获得它们对应的父文件夹。

    【讨论】:

    • 嗬,这样做完全有意义!谢谢 !我不知道 fread() 函数,它特别有用,因为我有巨大的 .csv 文件要处理。我对 [dat
    • 它是关于范围界定的。由于您在函数内调用fread,因此您看不到在父环境中创建的对象。试试function(x) { dat &lt;- fread("someFile") }。一样的。如果您在 lapply 方法中返回 dat,您将获得所有已读取的 dat 对象的列表。
    猜你喜欢
    • 2023-02-08
    • 1970-01-01
    • 2016-06-03
    • 2021-11-17
    • 1970-01-01
    • 2021-06-17
    • 1970-01-01
    • 2023-01-20
    • 2018-08-03
    相关资源
    最近更新 更多