首页 > 解决方案 > R - 加载多个 csv 文件并从名称中删除 .csv

问题描述

我在用于存放所有 .csv 文件的基本目录中有一些文件

base_dir <- file.path(path)
file_list <- list.files(path = base_dir, pattern = "*.csv")

我想一次加载所有这些:

for (i in 1:length(file_list)){
  assign(file_list[i],
  read.csv(paste(base_dir, file_list[i], sep = ""))

)}

但是,这会在 R 中生成名称中带有“.csv”的文件。

我想做的是加载所有文件,但一旦加载它们,就从名称中删除“.csv”。

我尝试了以下方法:

 for (i in 1:length(file_list)){ assign(file_list[i],
 read.csv(substr(paste(base_dir, file_list[i], sep = ""), 1,
 nchar(file_list[i]) -4))
 
 )}

但我收到一个错误: No such file or directory

有没有办法有效地做到这一点?

标签: rfor-loopsubstrread.csv

解决方案


通常,人们会将它们读入一个列表,而不是将它们作为自由对象在工作区中四处飘荡。使用dirorSys.glob生成完整路径名,然后使用read.csv读取每个路径名。L 的名称将是路径名,因此将它们简化为基本名称并删除 .csv 。

# paths <- dir(path = path, pattern = "\\.csv$", full = TRUE)
paths <- Sys.glob(sprintf("%s/*.csv", path))
L <- Map(read.csv, paths)
names(L) <- sub("\\.csv$", "", basename(names(L)))

如果您真的希望它们作为自由浮动对象,请添加以下内容:

list2env(L, .GlobalEnv)

推荐阅读