如何根据文件名将多个 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 函数。
我知道如何使用以下方法轻松加载整个文件夹的 .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 函数。