如何将多个(excel)文件读入R?

时间:2015-10-01 13:23:48

标签: r excel import

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

如何以最快,最直接的方式将这些文件加载​​到R中?

1 个答案:

答案 0 :(得分:63)

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

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

此方法当然也可以与其他文件读取功能一起使用,例如read.csvread.table。只需使用适当的文件读取功能替换read_excel,并确保在list.files中使用正确的模式。

如果您还想将文件包含在子目录中,请使用:

file.list <- list.files(pattern='*.xlsx', recursive = TRUE)

用于阅读Excel文件的其他可能包:openxlsx&amp; xlsx

假设每个文件的列都相同,您可以使用中的bind_rows将它们绑定在一个数据框中:

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

或来自rbindlist

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

两者都可以选择添加id列来识别单独的数据集。

更新:如果您不想使用数字标识符,只需使用sapplysimplify = FALSE一起阅读file.list中的文件:

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

使用 dplyr 中的bind_rows data.table 中的rbindlist时,id列现在包含文件名。< / p>

甚至另一种方法是使用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)

现在,您可以将数据框列表与来自 data.table rbindlist或来自 dplyr bind_rows绑定在一个数据框中。 id列现在将包含文件名而不是数字标识符。