如何根据文件名将多个 csv 文件加载到 R 中的单独对象(数据帧)中?

How to load multiple csv files into seperate objects(dataframes) in R based on filename?

我知道如何使用以下方法轻松加载整个文件夹的 .csv 文件:

csv_files = list.files(pattern ="*.csv")
myfiles = lapply(csv_files, read.delim, header = FALSE)

然后我可以轻松地遍历 'myfiles' 它们并做任何我想做的事。我遇到的问题是这只是加载工作目录中的所有 .csv 文件。

我想做的是能够根据文件名将文件分配给脚本中的对象。

比如说,在一个目录中我有这些文件; file001、file002、file003 和 exfile001、exfile002、exfile003。

我希望能够以这样的方式加载它们

file_object <- file...
exfile_object <- exfile...

因此,当我执行脚本时,它基本上会执行我为 file_object(在此示例中指定为 file001)和 exfile_object(在此示例中指定为 exfile001)执行的任何操作例子)。然后继续以这种方式继续目录中的其余文件(例如 file002、exfile002、file003、exfile003)。

我知道如何在 MATLAB 中执行此操作,但我刚刚开始掌握 R。

我想或许使用 list.files 函数将它们放入单独的列表中,只需更改脚本中的工作目录即可,但它看起来很乱,并且在我的情况下会涉及重写内容...

谢谢!

如果您的框架列表 myfiles 是这样命名的:

names(myfiles) <- gsub(".csv", "", csv_files)

那你就可以了

list2env(myfiles, globalenv())

将这些单独的帧转换为全局环境中的单独对象。

任何好奇的人的解决方案...

files <- list.files(pattern = ".*csv")

for(file in 1:length(files)) { 
  file_name <- paste(c("file00",file), collapse = " ")
  file_name <- gsub(" ", "", file_name, fixed = TRUE)
  ex_file_name <- paste(c("exfile00",file), collapse = " ")
  ex_file_name <- gsub(" ", "", ex_file_name, fixed = TRUE)
  
  file_object <- read.csv(file = paste(file_name, ".csv", sep=""),fileEncoding="UTF-8-BOM")
  exfile_object <- read.csv(file = paste(ex_file_name, ".csv", sep=""),fileEncoding="UTF-8-BOM")
  }

基本上在循环内构建文件名,然后在每次迭代时将其传递给 readcsv 函数。