2012-01-30 79 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