将多个文件读入R – 最佳做法
我有几百个中等大小的Excel文件(在5000到50.0000行之间,大约有100列)加载到R.它们有一个明确的命名模式,如x_1.xlsx
, x_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.csv
或read.table
等其他文件读取function。 只要用相应的文件读取functionreplaceread_excel
,并确保在list.files
使用正确的模式。
其他可能的用于读取Excel文件的软件包: openxlsx & xlsx
假设每个文件的列都是相同的,您可以使用bind_rows
的dplyr
将它们绑定在一个数据dplyr
:
library(dplyr) df <- bind_rows(df.list, .id = "id")
或从data.table
:
library(data.table) df <- rbindlist(df.list, idcol = "id")
两者都可以select添加一个id
列来识别单独的数据集。
更新:如果你不想要一个数字标识符,只需使用sapply
和simplify = FALSE
来读取file.list
的文件:
df.list <- sapply(file.list, read.csv, simplify=FALSE)
当从data.table中的dplyr或rbindlist
使用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)
现在,您可以使用rbindlist
的rbindlist或bind_rows
的bind_rows将数据rbindlist
列表绑定在一个数据框中 。 id
列现在将包含文件名而不是数字id
。