【发布时间】:2016-07-05 07:33:54
【问题描述】:
我一直在阅读有关如何读取多个 xlsx 文件并将其组合到一个 R 数据帧中的信息,并且遇到了一些非常好的建议,例如 How to read multiple xlsx file in R using loop with specific rows and columns,但到目前为止不适合我的数据集。
我希望 R 读取具有多个工作表的多个 xlsx 文件。所有工作表和文件都具有相同的列,但长度不同,应排除 NA。我想跳过前 3 行,只取 1:6、8:10、12:17、19 列。
到目前为止我尝试过:
file.list <- list.files(recursive=T,pattern='*.xlsx')
dat = lapply(file.list, function(i){
x = read.xlsx(i, sheetIndex=1, sheetName=NULL, startRow=4,
endRow=NULL, as.data.frame=TRUE, header=F)
# Column select
x = x[, c(1:6,8:10,12:17,19)]
# Create column with file name
x$file = i
# Return data
x
})
dat = do.call("rbind.data.frame", dat)
但这只会占用每个文件的第一张表
有谁知道如何将所有工作表和文件放在一个 R 数据框中?
另外,对于大型数据集,您会推荐哪些软件包?到目前为止,我尝试了 readxl 和 XLConnect。
【问题讨论】:
-
您已明确要求只提供函数中的第一张工作表:x = read.xlsx(i, sheetIndex=1,....)
-
另外,如果您希望优化大型数据集的速度,则值得查找 data.table 包。除其他外,它的 fread 函数允许您只读取您需要的列,而不是读取所有列然后进行子集化。但我不确定它是否适用于 .xlsx 文件。
-
你的 lapply 已经循环了文件,你需要在工作表上再循环一次才能得到你想要的。
-
感谢您的建议。你知道是否有办法用 read.xlsx 要求所有工作表?
标签: r excel xlsx readxl openxlsx