将多个文件读入R – 最佳做法

我有几百个中等大小的Excel文件(在5000到50.0000行之间,大约有100列)加载到R.它们有一个明确的命名模式,如x_1.xlsxx_2.xlsx

我知道有很多方法可以将这些文件加载​​到R中,例如for-loop或者lapplytypes的解决scheme。 因此,我的问题是:

你认为什么是最好的(最快,最直接)读取多个文件的方法?

你使用什么技巧或function?

使用list.files你可以创build一个工作目录中所有文件名的列表。 接下来,您可以使用lapply来遍历该列表,并使用readxl包中的read_excel函数读取每个文件:

 library(readxl) file.list <- list.files(pattern='*.xlsx') df.list <- lapply(file.list, read_excel) 

这个方法也可以用于read.csvread.table等其他文件读取function。 只要用相应的文件读取functionreplaceread_excel ,并确保在list.files使用正确的模式。

其他可能的用于读取Excel文件的软件包: openxlsx & xlsx


假设每个文件的列都是相同的,您可以使用bind_rowsdplyr将它们绑定在一个数据dplyr

 library(dplyr) df <- bind_rows(df.list, .id = "id") 

或从data.table

 library(data.table) df <- rbindlist(df.list, idcol = "id") 

两者都可以select添加一个id列来识别单独的数据集。


更新:如果你不想要一个数字标识符,只需使用sapplysimplify = FALSE来读取file.list的文件:

 df.list <- sapply(file.list, read.csv, simplify=FALSE) 

当从data.table中的dplyrrbindlist使用bind_rows时id列现在包含文件名。

甚至另一种方法是使用purrr

 library(purrr) file.list <- list.files(pattern='*.csv') file.list <- setNames(file.list, file.list) # only needed when you need an id-column with the file-names df <- map_df(file.list, read.csv, .id = "id") 

其他获取命名列表的方法:如果您不需要数字标识符,则可以在将它们绑定在一起之前将它们分配给列表中的数据框。 有几种方法可以做到这一点:

 # with the 'attr' function from base R attr(df.list, "names") <- file.list # with the 'names' function from base R names(df.list) <- file.list # with the 'setattr' function from the 'data.table' package setattr(df.list, "names", file.list) 

现在,您可以使用rbindlistrbindlistbind_rowsbind_rows将数据rbindlist列表绑定在一个数据框中id列现在将包含文件名而不是数字id