
R读写Excel文件中数据的方法
用R语言读写Excel的方法有很多,但每种方法都有让人头疼的地方,如xlsx包的代码复杂,只支持Excel2007;RODBC不易理解,限制太多,程序不稳定,会出各种怪毛病。另存为csv格式的方法倒是比较通用比较稳定,但又存在操作麻烦,无法程序化处理多个文件的问题。提取xml也是个办法,但步骤太多代码太复杂,令人望而生畏。用剪贴板转换也不好,这同样需要人工参与,还不如存为csv。
相比之下,用gdata包来读取,配合WriteXLS写入Excel则可以很好的避开上述麻烦。这两个包都支持Excel2003和Excel2007,运行稳定,代码简单直观,也不需要人工参与。下面用一个例子来说明这两个函数包读写Excel的方法。
目标:
ordersData目录下有多个结构相同的Excel文件,有些是Excel2007格式,有些是Excel2003格式,这些文件存储着历年来的销售订单。请读取这些文件,并统计出每个客户的总销售额,最后将结果写入result.xlsx。下面是2011.xlsx的部分数据:
代码:
library(gdata)
library(WriteXLS)
setwd("E: /ordersData")
fileList<-dir()
orders<-read.xls(fileList[1])
for (file in fileList[2:length(fileList)]){
orders<-rbind(orders,read.xls(file))
}
result<-aggregate(orders[,4], orders[c(2)],sum)
WriteXLS("result","result.xlsx")
result.xlsx中的部分数据如下:
代码解读
1、library(gdata)和library(WriteXLS)这两句代码用来引入第三方函数包,这两个包具有read.xls和WriteXLS函数,可以分别执行读取和写入Excel的动作。
2、fileList<-dir()这句代码列出了目录内的所有文件,之后的for语句则是循环读取文件,并将数据拼合到数据框orders中。如果目录内有其他文件,则应当用通配符来过滤。
3、result<-aggregate(orders[,4], orders[c(2)],sum),这句代码用来执行分组汇总,其中orders[,4]代表汇总列(即Amount),orders[c(2)]代表分组列(即Client)。
4、read.xls和WriteXLS虽然来自于不同的包,但都支持data.frame数据类型,因此可以很好的配合起来。另外,read.xls函数可以自动识别Excel2003和Excel2007格式,使用起来非常方便。
5整段代码都很简洁,初学者可以轻松掌握。
注意事项:
1.版本
gdata和WriteXLS不是R语言自带的库函数,而是第三方包,因此需要额外下载安装。另外,这两个函数包都会用到Perl环境,因此挑选合适版本的Perl尤为重要。经过尝试,当R语言的版本是2.15.0时,gdata最匹配的版本是2.13.3,WriteXLS的版本号则是3.5.0,但用最新的Perl环境与之配合时会出问题,需要使用旧一点的5.14.2版本才行,否则会报以下错误:
Error in xls2sep(xls, sheet, verbose = verbose, ..., method = method, :
Intermediate file 'C:\Users\Thim\AppData\Local\Temp\RtmpMHvLZS\file224060624738.csv' missing!
2.性能
读写小文件没问题,但读写稍大些的文件时会发现gdata和WriteXLS的性能极差(这也许是Perl的原因),比如读一个8列20万行的Excel就需要8到10分钟。如果特别关注性能,可以使用xlsx函数包。当然,这样一来就无法支持Excel2003了。事实上,xlsx的性能并不比gdata强太多,真正要解决性能问题,还是应当将所有的Excel文件都转为2007格式,并解压出里面的xml文件,通过解析xml文件来读取数据。
替代方案
对于R语言中存在的版本冲突和性能问题,我们也可以使用Python、集算器、Perl等语言来解决。和R语言一样,它们都可以读写Excel文件并进行数据计算。下面简单介绍集算器和Python的解决方案。
集算器已将访问EXCEL的功能打入安装包,无需单独下载第三方包,支持读写Excel2003和Excel2007,对更老的版本以及Excel2010也支持。代码如下:
这个方案要比R语言难用多了。
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
Cox 模型时间依赖性检验:原理、方法与实战应用 在生存分析领域,Cox 比例风险模型(Cox Proportional Hazards Model)是分析 “ ...
2025-09-26检测因子类型的影响程度大小:评估标准、实战案例与管控策略 在检测分析领域(如环境监测、食品质量检测、工业产品合规性测试) ...
2025-09-26CDA 数据分析师:以数据库为基石,筑牢数据驱动的 “源头防线” 在数据驱动业务的链条中,“数据从哪里来” 是 CDA(Certified D ...
2025-09-26线性相关点分布的四种基本类型:特征、识别与实战应用 在数据分析与统计学中,“线性相关” 是描述两个数值变量间关联趋势的核心 ...
2025-09-25深度神经网络神经元个数确定指南:从原理到实战的科学路径 在深度神经网络(DNN)的设计中,“神经元个数” 是决定模型性能的关 ...
2025-09-25在企业数字化进程中,不少团队陷入 “指标困境”:仪表盘上堆砌着上百个指标,DAU、转化率、营收等数据实时跳动,却无法回答 “ ...
2025-09-25MySQL 服务器内存碎片:成因、检测与内存持续增长的解决策略 在 MySQL 运维中,“内存持续增长” 是常见且隐蔽的性能隐患 —— ...
2025-09-24人工智能重塑工程质量检测:核心应用、技术路径与实践案例 工程质量检测是保障建筑、市政、交通、水利等基础设施安全的 “最后一 ...
2025-09-24CDA 数据分析师:驾驭通用与场景指标,解锁数据驱动的精准路径 在数据驱动业务的实践中,指标是连接数据与决策的核心载体。但并 ...
2025-09-24在数据驱动的业务迭代中,AB 实验系统(负责验证业务优化效果)与业务系统(负责承载用户交互与核心流程)并非独立存在 —— 前 ...
2025-09-23CDA 业务数据分析:6 步闭环,让数据驱动业务落地 在企业数字化转型中,CDA(Certified Data Analyst)数据分析师的核心价值,并 ...
2025-09-23CDA 数据分析师:以指标为钥,解锁数据驱动价值 在数字化转型的浪潮中,“用数据说话” 已成为企业决策的共识。但数据本身是零散 ...
2025-09-23当 “算法” 成为数据科学、人工智能、业务决策领域的高频词时,一种隐形的认知误区正悄然蔓延 —— 有人将分析结果不佳归咎于 ...
2025-09-22在数据分析、金融计算、工程评估等领域,“平均数” 是描述数据集中趋势最常用的工具之一。但多数人提及 “平均数” 时,默认指 ...
2025-09-22CDA 数据分析师:参数估计助力数据决策的核心力量 在数字化浪潮席卷各行各业的当下,数据已成为驱动业务增长、优化运营效率的核 ...
2025-09-22训练与验证损失骤升:机器学习训练中的异常诊断与解决方案 在机器学习模型训练过程中,“损失曲线” 是反映模型学习状态的核心指 ...
2025-09-19解析 DataHub 与 Kafka:数据生态中两类核心工具的差异与协同 在数字化转型加速的今天,企业对数据的需求已从 “存储” 转向 “ ...
2025-09-19CDA 数据分析师:让统计基本概念成为业务决策的底层逻辑 统计基本概念是商业数据分析的 “基础语言”—— 从描述数据分布的 “均 ...
2025-09-19CDA 数据分析师:表结构数据 “获取 - 加工 - 使用” 全流程的赋能者 表结构数据(如数据库表、Excel 表、CSV 文件)是企业数字 ...
2025-09-19SQL Server 中 CONVERT 函数的日期转换:从基础用法到实战优化 在 SQL Server 的数据处理中,日期格式转换是高频需求 —— 无论 ...
2025-09-18