用多张表将多个xlsx文件读取到一个R数据框中

我一直在阅读如何阅读和组合多个xlsx。 文件到一个R数据框,并遇到了一些非常好的build议,如: 如何在R中使用具有特定行和列的循环读取多个xlsx文件 ,但是不适合我的数据集。

我想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。

太感谢了!

我会使用这样的嵌套循环遍历每个文件的每个表。 这可能不是最快的解决scheme,但它是最简单的。

 require(xlsx) file.list <- list.files(recursive=T,pattern='*.xlsx') #get files list from folder for (i in 1:length(files.list)){ wb <- loadWorkbook(files.list[i]) #select a file & load workbook sheet <- getSheets(wb) #get sheet list for (j in 1:length(sheet)){ tmp<-read.xlsx(files.list[i], sheetIndex=j, colIndex= c(1:6,8:10,12:17,19), sheetName=NULL, startRow=4, endRow=NULL, as.data.frame=TRUE, header=F) if (i==1&j==1) dataset<-tmp else dataset<-rbind(dataset,tmp) #happend to previous } } 

您可以在加载阶段后清除NA值。

openxlsx解决scheme:

 filename <-"myFilePath" sheets <- openxlsx::getSheetNames(filename) SheetList <- lapply(sheets,openxlsx::read.xlsx,xlsxFile=filename) names(SheetList) <- sheets