在R中将文件夹中的多个csv文件读入单个数据框架中

26

我有一个包含332个csv文件的文件夹。这些文件名分别为001.csv,002.csv,003.csv,............,330.csv,331.csv,332.csv。所有文件具有相同数量的变量和相同的格式。

我需要将所有文件读入一个数据框中。我一直在逐个读取并使用rbind,但这太繁琐了。

需要帮助。


1
尽管复制可以让你了解该怎么做,但这个确切的问题之前已经在其他问题中发布过,比如这个 - Jaap
我也有332个csv文件在我的Coursera作业中 ;) - user1535147
3个回答

50

尝试使用lapply和do.call

file_names <- dir() #where you have your files

your_data_frame <- do.call(rbind,lapply(file_names,read.csv))

这很有帮助。只是要提醒一下:如果只读取文件夹名称,请在dire()中包括“full.names = TRUE”。 - LCheng

18

使用data.table的解决方案,答案摘自我之前在 Stack Overflow 上使用过的帖子。

library(data.table)  
files <- list.files(path = "/etc/dump",pattern = ".csv")
temp <- lapply(files, fread, sep=",")
data <- rbindlist( temp )

1
如何在数据框中捕获文件名,并将其作为单独的列来标识数据来源? - RanonKahn
@Arun 我认为你需要在你的回答中.csv前面加上2个反斜杠。 - Martin

1
这里有一个可能的解决方案。也可以使用apply函数来实现。
path <- "path_to_files"
files <- c(paste("00",2:9,".csv",sep=""),
           paste("0",10:99,".csv",sep=""), 
           paste(100:332,".csv",sep="")
           )
#Read first file to create variables in a data frame
data <- read.csv(paste(path,"001.csv",sep="/"))

#Read remaining files and rbind them to dataset
for (f in files) {
   data <- rbind(data,read.csv(paste(path, files, sep="/")))
}

感谢大家的即时帮助。以下带有header=TRUE的命令对我很有用。file_names <- dir() #你的文件所在位置your_data_frame <- do.call(rbind,lapply(file_names,read.csv, header=TRUE)) - Madhumita

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接