2

我正在考虑是直接从 R 读取 excel 文件,还是应该先将它们转换为 csv。我研究了阅读excel的各种可能性。我还发现读取 excel 可能有其缺点,例如转换日期和数字列数据类型等。

XLConnect - 依赖于 java
read.xslx - 大型数据集速度慢
read.xslx2 - 速度快但需要使用 colClasses 命令来指定所需的列类
ODBC - 可能有转换问题
gdata - 依赖于 perl

我正在寻找一种对至少一百万行数据转换问题最少的解决方案来说足够快。有什么建议么??

编辑

所以最后我决定转换为 csv 然后读取 csv 文件,但现在我必须找出读取大型 csv 文件(至少 100 万行)的最佳方法

我发现了 read.csv.ffdf 包,但这并不能让我设置自己的 colClass。具体来说这个

setAs("character","myDate", function(from){ classFun(from) } )
colClasses =c("numeric", "character", "myDate", "numeric", "numeric", "myDate")
z<-read.csv.ffdf(file=pathCsv,  colClasses=colClassesffdf)

这不起作用,我收到以下错误:-

ff 中的错误(initdata = initdata,长度 = 长度,级别 = 级别,有序 = 有序,:未实现 vmode 'list'

我也知道 RSQlite 和 ODBC 功能,但不想使用它。是否有解决上述错误的方法或解决此问题的任何其他方法?

4

3 回答 3

5

从这个问题开始,Hadley Wickham 发布了 R 包readxl,它包装了 C 和 C++ 库以分别读取.xls.xlsx文件。这是对先前可能性的重大改进,但并非没有问题。它既快速又简单,但是如果您有杂乱的数据,无论您选择哪种方法,您都必须做一些工作。沿着这.csv条路线走并不是一个糟糕的主意,但确实在您的分析中引入了一个手动步骤,并且依赖于您碰巧使用的任何版本的 Excel 提供一致的 CSV 输出。

于 2015-10-31T14:34:57.687 回答
4

All the solutions you mentioned will work - but if manually converting to .csv and reading with read.csv is an option, I'd recommend that. In my experience it is faster and easier to get right.

于 2013-08-28T23:51:07.697 回答
1

If you want speed and large data, then you might consider converting your excel file(s) to a database format, then connect R to the database.

A quick Google search showed several links for converting Excel files to SQLite databases, then you could use the RSQlite or sqldf package to read into R.

Or use the ODBC package if you convert to one of the databases that work with ODBC. The conversion of fields problems should be less if you are do the conversion to database correctly.

于 2013-08-28T23:51:32.497 回答