用于读取 csv 文件并将其存储在列表中的循环函数

Loop function for reading csv files and store them in a list

我有一个文件夹,其中存储了大约 10 个子文件夹,每个子文件夹包含 4 个 .csv 文件!每个子文件夹对应一个气象站,每个子文件夹中的每个文件包含不同时期的温度数据 (例如 station134_2000_2005.csv、station134_2006_2011.csv、station134_2012_2018.csv 等) .

我写了一个循环来打开每个文件夹,并将所有数据绑定到一个数据框中,但是做我的工作不是很方便。

我需要创建一个循环,以便将每个子文件夹中的这 4 个文件合并到一个数据帧中,然后存储在列表中的不同“插槽”中,或者如果更容易,每个站点合并 csv 数据(即每个子文件夹)作为数据帧从循环中导出。

我编写的打开所有文件夹中的所有文件并创建一个大(rbined)数据框的代码是:

directory <- list.files()   # to have the names of each subfolder
stations <- data.frame()    # to store all the rbined csv files

library(plyr)


for(i in directory){
  periexomena <- list.files(i,full.names = T, pattern = "\.csv$")
  for(f in periexomena){
    data_files <- read.csv(f, stringsAsFactors = F, sep = ";", dec = ",")
    stations <- rbind.fill(data_files,stations)
  }

有谁知道如何我有一个列表,每个子文件夹的 rbined 4 csv 文件数据在不同的插槽中,或者我如何修改上述代码 为了在不同的数据框中导出,每个子文件夹中的数据?

尝试:

slotted <- lapply(setNames(nm = directory), function(D) {
  alldat <- lapply(list.files(D, pattern="\.csv$", full.names=TRUE),
                   function(fn) {
                     message(fn)
                     read.csv2(fn, stringsAsFactors=FALSE)
                   })
  # stringsAsFactors=F should be the default as of R-3.6, I believe
  do.call(rbind.fill, alldat)
})