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

作者: 洞点咨询 | 来源:发表于2018-09-07 17:04 被阅读12次

近日有同事过来求助,他有一个含有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,把这个小技巧记录下来,希望对你有用哦😄!

相关文章

网友评论

    本文标题:R小技巧之Excel多sheet合并处理

    本文链接:https://www.haomeiwen.com/subject/fuygwftx.html