2012-01-30 56 views
5

RODBC是R中的一個主要庫,用於將數據從數據庫導入到R中。RODBC似乎具有「猜測」列的數據類型的能力,我發現它特別煩人。煩人的「功能」(或錯誤?)爲RODBC

我已經上傳的文件test.xlshere,或者您可以創建一個XLS文件自己:

  1. 創建2列,第一列名爲col_a和第二列命名col_b。無論你在col_a喜歡
  2. 類型,我鍵入的字母在此列92行
  3. 在col_b的第92位排,鍵入數字在那裏,我輸入的是「1923年」不改變數據類型(即不使用'
  4. 嘗試使用下面的腳本導入xls文件到R:

library(RODBC) 

setwd("C:/Users/hke775/Documents/Enoch/MISC/R_problems/RODBC") 
channel <- odbcConnectExcel("test.xls",readOnly=TRUE) 
dummy.df <- sqlFetch(channel,"Sheet1") 
odbcClose(channel) 

您會看到在dummy.dfcol_b全部是NA,1923這一列已不見了。

如果您想再次看到1923,您可以將col_b的第一行更改爲一個數字,然後它會再次返回。

這是非常煩人的,因爲我不喜歡手動修改數據。我需要使用其他軟件包來執行xls導入,但是我找不到像RODBC(我試過gdataxlsReadWrite)那樣順利的其他軟件包。

我錯過了sqlFetch命令中的任何內容,並造成麻煩嗎?謝謝。

+0

你確定你試過gdata嗎?當我使用'DF < - read.xls(「test.xls」)使用gdata包測試了它的測試文件時,它就起作用了。 1923年出現了。 – 2012-01-30 12:33:16

+0

Gdata需要有perl,我不能在我的辦公室安裝它 – lokheart 2012-01-30 12:46:15

+1

如果能夠安裝R的能力,那麼他們也應該安裝Rtools發行版本,因爲R開發所需要的並且它有perl:http ://cran.r-project.org/bin/windows/Rtools/ – 2012-01-30 13:06:12

回答

8

請不要責怪R或RODBC爲Microsoft's bugs ...;)

但是,由於ODBC驅動程序中的錯誤,指定要掃描的行 (的MaxScanRows)設定目前還沒有效果。換句話說,Excel ODBC驅動程序(MDAC 2.1和更高版本)總是掃描指定數據源中的前8行 ,以確定每列的 數據類型。

有關要掃描的行的bug,包括 簡單的解決方法的其他信息,請單擊文章編號下面以查看文章 Microsoft知識庫中:

189897 XL97:數據 截斷爲255個字符與Excel ODBC驅動程序

我試圖通過將TypeGuessRows值設置爲0,並看看會發生什麼修復KB189897

> library(RODBC) 
> channel <- odbcConnectExcel("test.xls",readOnly=TRUE) 
> tail(dummy.df <- sqlFetch(channel,"Sheet1")) 
    col_a col_b 
87  c NA 
88  d NA 
89  e NA 
90  f NA 
91  g NA 
92  h 1923 
> odbcClose(channel) 

請不要回復票或支票標記...只是發送現金。:)

+1

+1沒有得票或複選標記..! – agstudy 2013-01-21 13:04:32

+0

太好了。但是,那麼我們應該得出結論:沒有管理員權限的用戶沒有解決方案嗎? – 2013-10-16 09:31:53

+0

更好地將TypeGuessRows設置爲24或任何足夠深的設置。但0會進行無限制的掃描,並會影響性能。 (我正在讀取數千個非結構化的.xls/.xlsx文件) – Langeleppel 2014-12-21 20:29:44