2012-01-30 7 views
5

RODBC è la libreria principale in R per importare i dati da un database in R. RODBC sembra avere la capacità di "indovinare" il tipo di dati della colonna che trovo particolarmente fastidioso.fastidioso "funzionalità" (o bug?) Per RODBC

ho caricato un file test.xlshere, oppure si può creare un file xls da soli:

  1. creare 2 colonne, prima colonna chiamato col_a e la seconda colonna di nome col_b.
  2. tipo quello che vuoi in col_a, ho digitato le lettere su questa colonna per 92 righe
  3. alla fila 92 ° di col_b, digitare un numero lì, ho digitato "1923" senza modificare il tipo di dati (cioè non utilizzando ')
  4. cercano di importare il file xls nella R utilizzando il seguente script:

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) 

Vedrete che in dummy.df, col_b è tutto NA, lo 1923 in questa colonna è sparito.

Se si desidera visualizzare nuovamente lo 1923, è possibile modificare la 1a riga di col_b in un numero ed è di nuovo indietro.

Questo è molto fastidioso in quanto non preferisco modificare manualmente i dati. Ho bisogno di usare un altro pacchetto per importare xls, ma non riesco a trovare altri pacchetti uguali a RODBC (ho provato gdata e xlsReadWrite).

Mi sono perso qualcosa nel comando sqlFetch e causa il problema? Grazie.

+0

Sei sicuro di aver provato gdata? Quando ho provato il tuo file di test con il pacchetto gdata usando 'DF <- read.xls (" test.xls ")' ha funzionato. Era presente il '1923'. –

+0

Gdata deve avere perl, che non posso installarlo nel mio ufficio – lokheart

+1

Se i poteri che possono installare R allora dovrebbero installare anche la distribuzione Rtools poiché è richiesta per lo sviluppo R e che contiene perl in esso: http : //cran.r-project.org/bin/windows/Rtools/ –

risposta

8

Si prega di non dare la colpa R o RODBC per Microsoft's bugs ...;)

Tuttavia, a causa di un bug nel driver ODBC, specificando le righe analisi (MaxScanRows) impostazione attualmente non ha effetto . In altre parole, il driver ODBC Excel (MDAC 2.1 e versioni successive) esegue sempre la scansione delle prime 8 righe nell'origine dati specificata per determinare il tipo di dati di ciascuna colonna.

Per ulteriori informazioni sulle righe per la scansione di bug, tra cui una semplice soluzione , fare clic sul numero di articolo per visualizzare l'articolo della Microsoft Knowledge Base:

189897 XL97: I dati troncato a 255 caratteri con Excel driver ODBC

ho provato la correzione in KB189897 impostando il valore TypeGuessRows a 0 e guarda cosa succede!

> 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) 

Per favore, niente voti o segni di spunta ... basta inviare denaro.:)

+1

+1 per assenza di voti o segni di spunta ..! – agstudy

+0

Grande. Ma dovremmo concludere che un utente senza privilegi di amministratore non ha soluzione? –

+0

meglio impostare TypeGuessRows su 24 o qualsiasi impostazione abbastanza profonda. Ma 0 eseguirà una scansione illimitata e interesserà il peformance. (Sto leggendo migliaia di file .xls/.xlsx non strutturati) – Langeleppel