
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
人工智能对CDA数据分析领域的影响 人工智能对 CDA(Certified Data Analyst,注册数据分析师)数据分析领域的影响是全方位、多层 ...
2025-08-07SPSS 语法使用详解 在当今数据驱动的时代,SPSS( Statistical Package for the Social Sciences)作为一款功能强大的统计分析软 ...
2025-08-07SASEM 决策树:理论与实践应用 在复杂的决策场景中,如何从海量数据中提取有效信息并制定科学决策,是各界关注的焦点。SASEM 决 ...
2025-08-07CDA含金量分析 在数字经济与人工智能深度融合的时代,数据驱动决策已成为企业核心竞争力的关键要素。CDA(Certified Data Analys ...
2025-08-07大数据时代对定性分析的影响 在大数据时代,海量、多样、高速且低价值密度的数据充斥着我们的生活与工作。而定性分析作为一 ...
2025-08-07K-S 曲线、回归与分类:数据分析中的重要工具 在数据分析与机器学习领域,K-S 曲线、回归和分类是三个核心概念与工具,它们各 ...
2025-08-07CDA 数据分析师考试全解析 在当今数字化时代,数据已成为企业发展的核心驱动力,数据分析师这一职业也愈发受到重视。CDA 数据分 ...
2025-08-07大数据时代的隐患:繁荣背后的隐忧 当我们在电商平台浏览商品时,系统总能 “精准” 推送心仪的物品;当我们刷短视频时,算法 ...
2025-08-07解析 F 边界检验:协整分析中的实用工具 在计量经济学的时间序列分析中,判断变量之间是否存在长期稳定的均衡关系(即协整关系) ...
2025-08-07CDA 数据分析师报考条件详解:迈向专业认证的指南 在数据分析行业蓬勃发展的当下,CDA 数据分析师认证成为众多从业者提升专业 ...
2025-08-07通过 COX 回归模型诊断异常值 一、COX 回归模型概述 COX 回归模型,又称比例风险回归模型,是一种用于生存分析的统计方法。它能 ...
2025-08-07评判两组数据与初始数据准确值的方法 在数据分析与研究中,我们常常会面临这样的情况:需要对通过不同方法、不同过程得到的两组 ...
2025-08-07CDA 数据分析师行业标准:构建数据人才的能力坐标系 在数据驱动决策成为企业核心竞争力的时代,CDA(数据分析师)行业标准作为 ...
2025-08-07反向传播神经网络:突破传统算法瓶颈的革命性力量 在人工智能发展的历史长河中,传统算法曾长期主导着数据处理与模式识别领域 ...
2025-08-07MySQL 统计连续每天数据:从业务需求到技术实现 在数据分析场景中,连续日期的数据统计是衡量业务连续性的重要手段 —— 无论是 ...
2025-08-07抖音数据分析师:驱动平台增长的幕后推手 在抖音这个日活用户数以亿计的超级平台上,每一次用户的滑动、点赞、评论,每一条 ...
2025-08-07基于 SPSS 的中介效应分析结果解读:揭示变量间的隐性关联 在社会科学与自然科学研究中,变量之间的关系往往并非简单的直接作用 ...
2025-08-07正态分布与偏态分布的核心区别解析 在统计学中,数据的分布形态是理解数据特征、选择分析方法的基础。正态分布与偏态分布作为两 ...
2025-08-07CDA 一级考试内容详解 CDA(Certified Data Analyst)即数据分析师认证,一级考试作为该认证体系中的入门级别考试,主要面向零基 ...
2025-08-07中介分析的 SPSS 结果解读:从原理到实践 在社会科学、医学、心理学等领域的研究中,变量之间的关系往往并非简单的直接影响,而 ...
2025-08-07