2013-08-28 80 views
2

我想着想直接從R讀取excel文件還是應該先將它們轉換爲csv。我研究了閱讀excel的各種可能性。我還發現,閱讀Excel中可能有它的缺點,如日期和數字列的數據類型等閱讀優秀與R

XLConnect的轉換 - 依賴於Java
read.xslx - 慢於大型數據集
read.xslx2 - 快,但需要使用colClasses命令來指定所需的列類
ODBC - 可能轉換的問題
GDATA - 依賴於Perl的

我要尋找一個解決方案,這將是足夠快以最小的數據轉換問題一百萬ATLEAST行。有什麼建議麼??

編輯

所以最後我決定轉換爲csv,然後讀取CSV文件,但現在我必須找出閱讀了大量的CSV文件(用於至少一百萬行)的最佳方式

我發現了關於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 「清單」未實施

我也是知道的RSQlite與ODBC功能,但不希望使用它。是否有上述錯誤的溶液或解決這個任何其他方式?

+1

只是爲了澄清,你在談論'.xlsx'還是'.xls'文件格式?它們本質上非常不同,但都是Excel文件。 – thelatemail

+0

您可能需要編寫Perl/Python/C++代碼來執行從奇數日期格式到as.Date()識別的「標準」日期格式的轉換。或者說服'read.csv.ffdf()'的作者增加這個能力,或者自己破解這些代碼......它也許值得看看'data.table :: fread'(不確定,但可能值得一看)...或者,最簡單的,你可以用'character'讀取日期,然後轉換它們。 –

+0

我看過data.table :: fread,但它仍在開發中,不支持colClasses。我還考慮過將日期閱讀爲字符,然後轉換它們,但是正在尋找其他的東西。 – blank

回答

4

您提到的所有解決方案都可以使用 - 但如果手動轉換爲.csv並且使用read.csv進行閱讀是一種選擇,那麼我建議您這麼做。根據我的經驗,更快,更容易正確。

1

如果你想要速度和大數據,那麼你可以考慮將你的excel文件轉換爲數據庫格式,然後將R連接到數據庫。

一個快速谷歌搜索顯示,幾個環節的Excel文件轉換爲SQLite數據庫,那麼你可以使用RSQlite或sqldf包讀入R.

或者使用ODBC包,如果你轉換爲數據庫之一與ODBC一起工作。如果您正確地轉換到數據庫,字段問題的轉換應該更少。

5

由於這個問題,Hadley Wickham發佈了R包readxl,它包裝C和C++庫以分別讀取.xls.xlsx文件。這對以前的可能性有很大的改進,但並非沒有問題。它非常簡單快捷,但如果您的數據非常混亂,則無論您選擇哪種方法,都需要進行一些工作。沿着.csv路線走下去並不是一個可怕的想法,但是在你的分析中引入了一個手動步驟,並且依賴於你使用哪一個版本的Excel來提供一致的CSV輸出。