如何使用 R "读取.csv"文件夹中的许多文件?



如何读取许多CSV文件并将它们中的每一个都放入数据表中?

我有"A1.csv"A2.csv"A3.csv"的文件...... 在文件夹"A"中

所以我试了这个。

link <- c("C:/A")
filename<-list.files(link)
listA <- c()
for(x in filename) {
temp <- read.csv(paste0(link , x), header=FALSE)
listA <- list(unlist(listA, recursive=FALSE), temp)
}

而且效果不佳。我怎样才能完成这项工作?

编写一个正则表达式以匹配文件名

reg_expression <- "A[0-9]+"
files <- grep(reg_expression, list.files(directory), value = TRUE)

然后运行相同的循环,但如果需要,可以使用assign动态命名数据帧

for(file in files){
assign(paste0(file, "_df"),read.csv(file))
}

但一般来说,在作用域中引入未知变量是一种不好的做法,所以最好做一个循环,比如

dfs <- list()
for(index in 1:length(files)){
file <- files[index]
dfs[index] <- read.csv(file)
}

除非每个文件都是完全不同的结构(即不同的列......行数无关紧要(,您可以考虑一种更有效的方法来读取lapply中的文件并将其存储在列表中。好处之一是,无论您对一帧执行什么操作,都可以立即使用lapply非常轻松地对所有帧执行。

files <- list.files(link, full.names = TRUE, pattern = "csv$")
list_of_frames <- lapply(files, read.csv)
# optional
names(list_of_frames) <- files # or basename(files), if filenames are unique

类似于sapply(list_of_frames, nrow)的东西会告诉你每帧有多少行。如果你有更复杂的东西,

new_list_of_frames <- lapply(list_of_frames, function(x) {
# do something with 'x', a single frame
})

最直接的问题是,将文件路径粘贴在一起时,需要一个路径分隔符。撰写文件路径时,最好使用函数file.path,因为它将尝试确定运行代码的操作系统的路径分隔符。所以你想使用:

read.csv(files.path(link , x), header=FALSE)

更好的是,在列出文件时返回完整路径(并且可以过滤.csv(:

filename <- list.files(link, full.names = TRUE, pattern = "csv$")

结合使用assign动态创建变量的想法:

link <- c("C:/A")
files <-list.files(link, full.names = TRUE, pattern = "csv$")
for(file in files){
assign(paste0(basename(file), "_df"), read.csv(file))
}

最新更新