【发布时间】:2017-05-11 11:51:29
【问题描述】:
我一直在使用 XLConnect 函数 loadworkbook 将每个 xlsx 文件加载到 R 中,然后 rbind 将它们合并在一起。最好的方法是什么,而不是编写多个 df 以稍后合并它们。我正在尝试使用下面的代码将我的 excel 文件合并到 2 个数据框(大多数文件的 2 个工作表名称)。列始终相同,但文件名会更改。
当前/慢速方式
require(XLConnect)
df <- loadWorkbook(paste(location,'UK.xlsx',sep=""))
dfb <- loadWorkbook(paste(location,'US.xlsx',sep=""))
UK <-readWorksheet(df,sheet="School",startRow=0,startCol=0,autofitRow=TRUE,endCol=21,header=TRUE)
US <-readWorksheet(dfb,sheet="School",startRow=0,startCol=0,autofitRow=TRUE,endCol=21,header=TRUE)
School <- rbind(UK,US)
UK <-readWorksheet(df,sheet="College",startRow=0,startCol=0,autofitRow=TRUE,endCol=21,header=TRUE)
US <-readWorksheet(dfb,sheet="College",startRow=0,startCol=0,autofitRow=TRUE,endCol=21,header=TRUE)
College <- rbind(UK,US)
新代码
require(readxl)
filelist<- list.files(location,pattern='xlsx',full.names = T)
当不是每个文件都有两个工作表名时,如何将每个工作表名读入数据框中。我需要 2 个数据框,1 个用于学校,1 个用于大学。
我想我需要尝试Schools <-lapply(filelist, read_excel, sheet="School") 之类的东西,但我得到错误:找不到工作表“学校”。我认为这个错误是因为工作表学校不在每个文件上。我正在使用list.files,因为文件名并不总是相同。
【问题讨论】:
-
您应该通读包中的可用函数,看看是否有将工作表名称作为向量提供的函数。如果是,那么您可以检查床单是否存在。例如,
openxlsx包具有用于此目的的函数getSheetNames。 -
工作表名称总是相同的学校和学院,但并非每个文件都有,这就是为什么我不知道如何将它们合并在一起。
-
我需要一个数据框,它将为每个文件合并每个名为 School 的工作表名称,并为 College 做同样的事情,但我不知道这样做的最佳方法是什么。谢谢
-
您可以尝试获取工作表 School,如果失败则捕获错误,然后优雅地继续前进。你可以使用
tryCatch来做到这一点。