京公网安备 11010802034615号
经营许可证编号:京B2-20210330
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
金融统计不是单纯的 “数据计算”,而是贯穿金融业务全流程的 “风险量化工具”—— 从信贷审批中的客户风险评估,到投资组合的 ...
2025-11-11这个问题很有实战价值,mtcars 数据集是多元线性回归的经典案例,通过它能清晰展现 “多变量影响分析” 的核心逻辑。核心结论是 ...
2025-11-11在数据驱动成为企业核心竞争力的今天,“不知道要什么数据”“分析结果用不上” 是企业的普遍困境 —— 业务部门说 “要提升销量 ...
2025-11-11在大模型(如 Transformer、CNN、多层感知机)的结构设计中,“每层神经元个数” 是决定模型性能与效率的关键参数 —— 个数过少 ...
2025-11-10形成购买决策的四个核心推动力的是:内在需求驱动、产品价值感知、社会环境影响、场景便捷性—— 它们从 “为什么买”“值得买吗 ...
2025-11-10在数字经济时代,“数字化转型” 已从企业的 “可选动作” 变为 “生存必需”。然而,多数企业的转型仍停留在 “上线系统、收集 ...
2025-11-10在数据分析与建模中,“显性特征”(如用户年龄、订单金额、商品类别)是直接可获取的基础数据,但真正驱动业务突破的往往是 “ ...
2025-11-07在大模型(LLM)商业化落地过程中,“结果稳定性” 是比 “单次输出质量” 更关键的指标 —— 对客服对话而言,相同问题需给出一 ...
2025-11-07在数据驱动与合规监管双重压力下,企业数据安全已从 “技术防护” 升级为 “战略刚需”—— 既要应对《个人信息保护法》《数据安 ...
2025-11-07在机器学习领域,“分类模型” 是解决 “类别预测” 问题的核心工具 —— 从 “垃圾邮件识别(是 / 否)” 到 “疾病诊断(良性 ...
2025-11-06在数据分析中,面对 “性别与购物偏好”“年龄段与消费频次”“职业与 APP 使用习惯” 这类成对的分类变量,我们常常需要回答: ...
2025-11-06在 CDA(Certified Data Analyst)数据分析师的工作中,“可解释性建模” 与 “业务规则提取” 是核心需求 —— 例如 “预测用户 ...
2025-11-06在分类变量关联分析中(如 “吸烟与肺癌的关系”“性别与疾病发病率的关联”),卡方检验 P 值与 OR 值(比值比,Odds Ratio)是 ...
2025-11-05CDA 数据分析师的核心价值,不在于复杂的模型公式,而在于将数据转化为可落地的商业行动。脱离业务场景的分析只是 “纸上谈兵” ...
2025-11-05教材入口:https://edu.cda.cn/goods/show/3151 “纲举目张,执本末从。” 若想在数据分析领域有所收获,一套合适的学习教材至 ...
2025-11-05教材入口:https://edu.cda.cn/goods/show/3151 “纲举目张,执本末从。” 若想在数据分析领域有所收获,一套合适的学习教材至 ...
2025-11-04【2025最新版】CDA考试教材:CDA教材一级:商业数据分析(2025)__商业数据分析_cda教材_考试教材 (cdaglobal.com) ...
2025-11-04在数字化时代,数据挖掘不再是实验室里的技术探索,而是驱动商业决策的核心能力 —— 它能从海量数据中挖掘出 “降低成本、提升 ...
2025-11-04在 DDPM(Denoising Diffusion Probabilistic Models)训练过程中,开发者最常困惑的问题莫过于:“我的模型 loss 降到多少才算 ...
2025-11-04在 CDA(Certified Data Analyst)数据分析师的工作中,“无监督样本分组” 是高频需求 —— 例如 “将用户按行为特征分为高价值 ...
2025-11-04