5

RODBC 是 R 中用于将数据从数据库导入 R 的主要库。RODBC似乎具有“猜测”列的数据类型的能力,我觉得这特别烦人。

我在test.xls 这里上传了一个文件,或者您可以自己创建一个 xls 文件:

  1. 创建 2 列,第一列命名col_a,第二列命名col_b
  2. 输入你喜欢的任何内容col_a,我在此列上输入了 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)

你会看到 in dummy.df, col_bis all NA1923这个列中的 消失了。

如果你想再1923看一遍,你可以把第一行改成col_b一个数字,它又回来了。

这很烦人,因为我不喜欢手动修改数据。我需要使用其他包来进行 xls 导入,但我找不到其他包像RODBC(我试过gdataxlsReadWrite)那样流畅。

我是否遗漏了sqlFetch命令中的任何内容并造成了麻烦?谢谢。

4

1 回答 1

8

请不要将微软的错误归咎于 R 或 RODBC ... ;)

但是,由于 ODBC 驱动程序中的错误,指定要扫描的行 (MaxScanRows) 设置当前无效。换句话说,Excel ODBC 驱动程序(MDAC 2.1 和更高版本)总是扫描指定数据源中的前 8 行以确定每一列的数据类型。

有关要扫描的行错误的其他信息,包括简单的解决方法,请单击下面的文章编号以查看 Microsoft 知识库中的文章:

189897 XL97:使用 Excel ODBC 驱动程序将数据截断为 255 个字符

我通过将值设置为 0 尝试了KB189897TypeGuessRows中的修复,看看会发生什么!

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

拜托,不要投票或复选标记......只需发送现金。:)

于 2012-01-30T23:41:45.933 回答