2012-01-30 8 views
5

RODBC es la biblioteca principal en R para importar datos de una base de datos en R. RODBC parece tener la capacidad de "adivinar" el tipo de datos de la columna que me parece particularmente molesto."característica" molesta (o errores?) Para RODBC

He subido un archivo test.xlshere, o puede crear un archivo xls mismo:

  1. crear 2 columnas, la primera columna nombrada col_a y la segunda columna el nombre col_b.
  2. tipo lo que quiera en col_a, que las letras escritas en esta columna para 92 filas
  3. en la fila 92 ° de col_b, escriba un número allí, he escrito "1923" sin cambiar el tipo de datos (es decir, no utilizando ')
  4. intenta importar el archivo XLS en R utilizando la siguiente secuencia de comandos:

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) 

Verá que en dummy.df, col_b es todo NA, el 1923 en esta columna ha desaparecido.

Si desea ver el 1923 nuevamente, puede cambiar la 1ra fila de col_b a un número, y está de vuelta otra vez.

Esto es muy molesto ya que no prefiero modificar los datos manualmente. Necesito usar otro paquete para hacer la importación xls, pero no puedo encontrar otros paquetes tan fáciles como RODBC (probé gdata y).

¿Me faltaba algo en el comando sqlFetch y ocasioné el problema? Gracias.

+0

¿Estás seguro de que has probado gdata? Cuando probé su archivo de prueba con el paquete gdata usando 'DF <- read.xls (" test.xls ")' funcionó. El '1923' estaba presente. –

+0

Gdata necesita tener Perl, que no puedo instalar en mi oficina – lokheart

+1

Si los poderes pueden instalar R, entonces también deberían instalar la distribución Rtools, ya que es necesario para el desarrollo R y tiene perl: http : //cran.r-project.org/bin/windows/Rtools/ –

Respuesta

8

Por favor, no culpar R o RODBC para Microsoft's bugs ...;)

Sin embargo, debido a un error en el controlador ODBC, especificando las filas escanear (MaxScanRows) el establecimiento actualmente no tiene ningún efecto . En otras palabras, el controlador Excel ODBC (MDAC 2.1 y posterior) siempre escanea las primeras 8 filas en la fuente de datos especificada para determinar el tipo de datos de cada columna.

Para obtener información adicional acerca de las filas en las que buscar errores, incluyendo una sencilla solución , haga clic en el número de artículo siguiente para ver el artículo en Microsoft Knowledge Base:

189897 XL97: Datos truncado a 255 caracteres con el controlador ODBC de Excel

me trató la solución en KB189897 estableciendo el valor TypeGuessRows a 0 y mira lo que pasa!

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

Por favor, sin votos o marcas de verificación ... simplemente envíe efectivo.:)

+1

+1 sin votos positivos o marcas de verificación ..! – agstudy

+0

Genial. Pero, ¿deberíamos concluir que un usuario sin privilegios de administrador no tiene solución? –

+0

configure mejor TypeGuessRows a 24 o cualquier configuración lo suficientemente profunda. Pero 0 hará un escaneo ilimitado y afectará el rendimiento. (Estoy leyendo miles de archivos .xls/.xlsx no estructurados) – Langeleppel

Cuestiones relacionadas