将数千个csv文件合并到r中的单个数据帧中



我有2500个csv文件,所有文件都具有相同的列和不同数量的观察值。
每个文件大约3mb(每个文件约10000 obs)。
理想情况下,我希望将所有这些读取到单个数据帧中。
每个文件代表一个世代,包含有关性状、表型和等位基因频率的信息。
在读取这些数据时,我还试图为每个读取添加一个额外的列,指示生成。

我写了下面的代码:
read_data <- function(ex_files,ex){
df <- NULL
ex <- as.character(ex)
for(n in 1:length(ex_files)){
temp <- read.csv(paste("Experiment ",ex,"/all e",ex," gen",as.character(n),".csv",sep=""))
temp$generation <- n
df <- rbind(df,temp)
}
return(df)
}

ex_files指向list。长度,而ex是指在重复中进行的实验数(即。我有多个实验,每个2500个csv文件)。

我目前正在运行它(我希望它写得正确!),但是它需要相当长的时间(如预期的那样)。我想知道是否有一种更快的方法来做到这一点?

在循环中增长对象是低效的。用list.files列出你想要读取的所有文件,用purrr::map_df将它们合并到一个数据框中,并添加一个名为generation的列,该列将为每个文件提供唯一的编号。

filenames <- list.files(pattern = '\.csv', full.names = TRUE)
df <- purrr::map_df(filenames, read.csv, .id = 'generation')
head(df)

尝试plyr

filenames = list.files(pattern = '\.csv', full.names = TRUE)
df = plyr::ldpy(filenames , data.frame)