从本地读取的文档时,除了用read.csv
和read.table
读取.csv
或者.txt
文件以外,还不可避免的碰到大量需要从.xlsx
格式的文件中读取数据的情况,将其转换格式为.csv
或者.txt
当然是一种方法,曲径通幽的存入数据库,再用R调用数据库内容亦可,但是最直接的方式无非还是直接读取。下面是几种常见读取方式的比较,至于最终选择哪种读取方式,见仁见智。
xlsx
包
我们先随机生成一个文件,将它写入demo.xlsx
文件中。我们将用到xlsx
包中的write.xlsx()
函数。
|
|
这个包的依赖包包括rJava
和xslxjars
,在使用本包之前必须保证Java或jdk已经安装好、环境变量也已设置好。xlsx
提供两种读取的函数:read.xlsx()
和read.xlsx2()
,前者可直接读取,并自动判断数据类型;后者读取速度更快,但是需要手动补充每列的数据类型。
|
|
## user system elapsed
## 6.83 0.07 4.37
|
|
## user system elapsed
## 0.66 0.04 0.22
可以看出第二种读取方式比第一种要快很多。
XLConnect
包
此包同样基于java:
|
|
## user system elapsed
## 0.36 0.03 0.14
与xlsx
包的第二个读取函数相比,速度更快。xlsx
包里有read.xlsx()
和write.xlsx()
一对函数,同样的,XLConnect
包里也有与readWorksheet()
对应的writeWorksheet()
函数。
补充于 12/7/2015:
此函数无法自动将excel中的公式转换为数值。
如果一个excel文件中含有公式,则会报错。
gdata
包
这个包是基于Perl语言的。Linux和Mac系统自带Perl但是Windows系统需要自行安装。如果R无法自动获取Perl编译器,则需要手动指定编译器的位置。
|
|
## user system elapsed
## 0.00 0.00 1.92
同样也是很快速的读取方法。
其它包
- 32位系统中,可以使用
RODBC
包的odbcConnectExcel()
函数来读取数据。但是这个函数只能用于32位系统,64位无法使用。 xlsReadWrite
包中的read.xls()
函数可用于读取.xls
格式的文件,但无法读取.xlsx
文件。