作者:黄天元,复旦大学博士在读,热爱数据科学与开源工具(R),致力于利用数据科学迅速积累行业经验优势和科学知识发现,涉猎内容包括但不限于信息计量、机器学习、数据可视化、应用统计建模、知识图谱等,著有《R语言数据高效处理指南》(《R语言数据高效处理指南》(黄天元)【摘要 书评 试读】- 京东图书,《R语言数据高效处理指南》(黄天元)【简介_书评_在线阅读】 - 当当图书)。知乎专栏:R语言数据挖掘。邮箱:huang.tian-yuan@qq.com.欢迎合作交流。

最近接到一个任务,需要把保存在Excel表格多工作表的数据读取出来,然后再进行各种清洗、处理和计算(如长宽转换、根据公式进行计算、统一杂乱无章的存储格式等)。一个工作簿中有80多个工作表,每个工作表有自己的名称,第一行有题目,第二行有中文标注,第三行有英文缩写码...如果直接用交互式操作肯定是崩溃的,估计一个月都不一定能做完。数据量不能说大,每张工作表也就8000+行,没有一个表格是破万的(事实上综合所有表格数据最后统计总共有76000+条数据)。

为了完成这个任务,就不得不先读取所有Excel中的信息,包括工作表名称、题目、每个表格的所有列都是什么(不知道就没法计算)。读取Excel的话,这次用了realxl包,还是比较好用的。可以参考以下链接:

CRAN - Package readxl​cran.r-project.org

之所以用了它,是因为我手里的Excel表格不仅有xlsx格式的,还有xls格式的。如果工作表不多,可以转换一下,统一用openxlsx包,但是读取的时候使用一下还是很便捷的。

能够读取之后,后面所有的设计当然还是使用tidyverse生态系统来完成,几乎没有无法完成的任务,但中间还是遇到了很多难题,不断卡壳。比如时间的转化,发现时间的格式不统一,有的要使用lubridate包来做,有的时候则需要用janitor包来做,最后还要吧两者的结果合并起来,如下图所示:

还有在时间上原始表格使用0时作为标准,但是规范化的结果表则需要使用24小时坐标标准,于是我只好把0换成24,但是日期要减少1天:

因为数据特别杂乱,根本无法设置通用函数来处理一切,为批处理带来了巨大的挑战。其中,使用汇总函数(max/min/mean)需要忽略缺失值,为了少写一些na.rm = T,我参考了SO的内容,进行了全局设置。此外,还需要认为定义上旬、中旬、下旬(case_when),并对组内的数据再次进行分组汇总:

在summarise函数中使用by函数可以继续汇总,不过要保证汇总之后你还需要继续汇总,因为summarise函数最终只能够返回一个值。同样,使用方括号的方法也能够实现定制化的组内汇总。

最后不能不提的是,必须要把处理好的数据再次导入到多工作表的Excel中,这个任务我在以前都还是先导出为csv文件然后再复制粘贴的,但是这次的工作量太大,显然是不实际的。这时候我花了一点时间认真地学了一下openxlsx这个包,仅仅几个函数,就让这个任务变得便捷无比。链接如下:

CRAN - Package openxlsx​cran.r-project.org

这个包近一个月被下载20万+次,不是开玩笑。我主要用到了以下三个函数:

  • loadWorkbook(读取)
  • writeData(写入工作表)
  • saveWorkbook(保存)

就是这么简单的几个函数,威力却极为巨大。对于xlsx文件来说,openxlsx无疑已经登峰造极了,不依赖Java,使用Rcpp加速。不过因为我要进行多次存取,对Excel文件的存取依然是相对费时的,建议使用二进制来进行读取,我这里用了readr包的的read/write_rds函数进行工作簿对象的读写。内存占用会稍微大一点(对于计算机来说空间没有时间重要),但是读写速度会非常快。

对于需要使用Excel进行批处理的小伙伴,这里强推openxlsx这个包,能够对多工作表的工作簿进行批量化读入写出,过程可以说是具备半自动化智能,真乃神器!

r语言读取excel数据_R语言操纵Excel进行数据透视与批处理相关推荐

  1. r语言读取excel数据_R语言 | 更快的表格文件读取方法!

    友情提示:蓝色下划线字体为引文,请保持警惕! 使用R语言读取 Affymetrix Human Exon 1.0 ST Array 芯片平台探针注释文件: https://www.affymetrix ...

  2. python与r语言处理excel数据_R语言 | 读写txt、csv、excel文件

    前段时间看到plotnine库(封装的R语言ggplot2)作的图太美了,有点想重新拾起R语言^_^ R语言代码略带凌乱,讲真的还是更喜欢Python代码简洁.不过好几年不琢磨R语言,对R语言代码的凌 ...

  3. r包调用legend函数_R语言实现基于朴素贝叶斯构造分类模型数据可视化

    本文内容原创,未经作者许可禁止转载! 目录 一.前言 二.摘要 三.关键词 四.算法原理 五.经典应用 六.R建模 1.载入相关包(内含彩蛋): 1.1 library包载入 1.2 pacman包载 ...

  4. r语言中mpg数据_R语言数据筛选整理包dplyr

    dplyr软件包是R中功能最强大,最受欢迎的软件包之一.该软件包由最受欢迎的R程序员Hadley Wickham编写,他编写了许多有用的R软件包,如ggplot2,tidyr等.本文包括一些示例和如何 ...

  5. r语言各形状编号_R语言入门第八讲:编码分类变量(factor)

    今天第八篇~~~~~~ 在第一讲中我给大家介绍了read.table函数的使用.最近我在处理一个一百万左右的数据,发现read.table函数出了问题.我不知道是在excel转成txt时出的问题还是因 ...

  6. r语言 fread函数参数_R语言 第4章 初级绘图(6)

    分析数据间的关系 散点矩阵图 如果数据框是多维数据,那么plot函数将绘制出两两之间散点图组合成为散点矩阵图(matrix of scatterplots).散点矩阵图将多个散点图组合起来,以便可以同 ...

  7. r语言 回归分析 分类变量_R语言下的PSM分析分类变量处理与分析步骤

    最近学习了PSM,我选择了用R去跑PSM,在这过程中遇到了许多问题,最后也都一一解决了,写下这个也是希望大家在遇到相同问题的时候能够得到帮助和启发,别的应该不会遇到太难的问题了哈哈.最近我也没做什么, ...

  8. linux下c语言读取csv文件,C语言读取csv文件

    C语言读取csv文件 逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本).纯文本意味着该 ...

  9. c语言读取文件函数,C语言文件操作详细分析:读取文件(fread函数使用)

    C语言文件操作详细分析:读取文件(fread函数使用) 这里详细介绍了C语言读取文件的函数fread的使用说明,参照了MSDN的说明,同时加入自己的经验让大家学的更加明白. C语言读取文件函数frea ...

  10. c语言读取程序内容,C语言详解——文件读取

    1. 需要了解的概念 需要理解的知识点包括:数据流.缓冲区.文件类型.文件存取方式 1.1 数据流: 指程序与数据的交互是以流的形式进行的.进行C语言文件的存取时,都会先进行"打开文件&qu ...

最新文章

  1. 惊讶!缓存刚Put再Get居然获取不到?
  2. OpenTSDB介绍——基于Hbase的分布式的,可伸缩的时间序列数据库,而Hbase本质是列存储...
  3. 纯干货-多场景下大屏可视化应用(文中含可视化源代码链接)
  4. LR录制脚本中文乱码问题
  5. mysql---批量插入数据:100w条数据
  6. jmeter负载测试测试_Apache JMeter:随心所欲进行负载测试
  7. CSDN转载别人文章的操作
  8. Oracle在HPUX IA64平台登陆缓慢问题分析
  9. .Net程序员学用Oracle系列(16):访问数据库(ODP.NET)
  10. php和mssql连接好吗,php如何与mssql数据库连接与配置_PHP教程
  11. 数据恢复软件TOP 1—easyrecovery
  12. 地图加载不出来坐标标识点图片
  13. SwitchHosts For Mac快速切换修改hosts文件工具
  14. Python中time.sleep(0.001)真的只等待1毫秒吗?
  15. GoogleTest 之路3-Mocking Framework
  16. 中国共享经济行业前瞻及投资战略规划评估分析报告2022-2028年版
  17. js实现轮播图(简单滚动轮播)
  18. vivo手机显示服务器维修中,OPPO和vivo手机通病进水后黑屏不显示怎么维修
  19. 加快推进农粮产业链变革,中粮业绩创历史新高
  20. java基础-day08-面向对象(三) this关键字、继承、static关键字

热门文章

  1. 你需要XXX的权限对此文件(此文件夹进行)修改
  2. Terraform入门 - 4. destroy 基础设施
  3. 甜、酸、苦、辣、咸与健康
  4. Verizon发布2010年数据破坏调查报告
  5. 事故通报绝不能一报了事22344
  6. ApartmentState.STA
  7. 【java.lang.UnsupportedClassVersionError】版本不一致出错
  8. 项目中使用RDLC报表
  9. Dottrace跟踪代码执行时间
  10. ASP.NET-自定义HttpModule与HttpHandler