R小技巧之Excel多sheet合并处理

近日有同事过来求助,他有一个含有400个sheet的excel文件,由于要汇总数据进行统计,把400个sheet手动合并在一起简直要累死人的节奏;同事十分着急,我说行,先看看再说。

打开excel文件,随便翻看几个sheet的数据,幸运的是每个sheet的信息结构一致:

image

这时候记得R里面有个openxlsx包,通过设置sheet编号便可读取对应sheet的数据,查看了openxlsx文档后知道:

Usage
read.xlsx(xlsxFile, sheet = 1, startRow = 1, colNames = TRUE,
  rowNames = FALSE, detectDates = FALSE, skipEmptyRows = TRUE,
  skipEmptyCols = TRUE, rows = NULL, cols = NULL, check.names = FALSE,
  namedRegion = NULL, na.strings = "NA", fillMergedCells = FALSE)
* 参数xlsxFile就是待处理的xlsx文件
* 参数sheet就是待处理xlsx文件的sheet序号

于是,通过read.xlsx()函数再结合for循环,利用9行代码解决了这个问题:

# 载入openxlsx packagelibrary(openxlsx) 
# 定义一个空值aa,用以存入后续处理完的数据aa <- NA# 设置循环进度条,便于观察for循环的百分比进展情况pb <- txtProgressBar(min = 0, max = 400, style = 3)# 直接用for循环依次读取400个sheet数据并合并一起for (i in 1:400){    # 读入数据
  mydata<-read.xlsx("//...//document.xlsx",i,colNames = F)    # 数据合并
  aa <- rbind(aa,mydata)    # 当前for循环进度展示
  setTxtProgressBar(pb,i)
}# 数据导出write.xlsx(aa,"//...//document_etl.xlsx",colNames = TRUE)

由于每个sheet数据不是特别大,for循环400次不到1分钟就全部完成了。

偶然碰到的一个case,把这个小技巧记录下来,希望对你有用哦😄!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容