RODBC 读取错误,其中 excel 列包含前导 NA

Posted

技术标签:

【中文标题】RODBC 读取错误,其中 excel 列包含前导 NA【英文标题】:RODBC read error where excel column contains leading NAs 【发布时间】:2012-08-28 03:34:43 【问题描述】:

我一直在使用 RODBC 包将 Excel 工作表读入 R,并且遇到了 Excel ODBC 驱动程序的问题。包含(足够的)前导 NA 的列被强制为逻辑。

在 Excel 中数据显示如下:

period      n       n.ft n.pt
1/02/1985   0.008   NA  0.025
1/03/1985   -0.003  NA  -0.024
1/04/1985   0.002   NA  0.015
1/05/1985   0.006   NA  0.012
1/06/1985   0.001   NA  0.003
1/07/1985   0.005   NA  0.010
1/08/1985   0.006   NA  0.001
1/09/1985   0.007   NA  0.013
1/10/1985   -0.002  NA  0.009
1/11/1985   0.013   NA  0.019
1/12/1985   -0.004  NA  -0.021
1/01/1986   0.008   NA  0.009
1/02/1986   0.002   NA  0.009
1/03/1986   0.002   -0.003  1.000
1/04/1986   0.010   -0.003  0.041
1/05/1986   0.000   -0.001  -0.004
1/06/1986   0.005   0.003   0.005
1/07/1986   -0.003  0.005   0.012
1/08/1986   -0.001  -0.003  -0.021
1/09/1986   0.003   -0.001  0.012
1/10/1986   0.003   0.003   0.010
1/11/1986   -0.003  0.003   -0.003
1/12/1986   0.003   -0.003  0.022
1/01/1987   0.001   0.013   -0.004
1/02/1987   0.004   -0.004  0.011
1/03/1987   0.004   0.008   0.005
1/04/1987   0.000   0.002   -0.002
1/05/1987   0.001   0.002   0.006
1/06/1987   0.004   0.010   0.00

我读入的数据是:

require(RODBC)
conexcel <- odbcConnectExcel(xls.file="C:/data/example.xls")
s1 <- 'SOx'
dd <- sqlFetch(conexcel, s1)
odbcClose(conexcel)

这在整个第二列中读取为NA。我认为这是因为它猜测是合乎逻辑的,因此随后的数字被评估为无效,因此NA

> str(dd)
'data.frame':   29 obs. of  4 variables:
 $ period: POSIXct, format: "1985-02-01" "1985-03-01" ...
 $ n     : num  0.00833 -0.00338 0.00157 0.00562 0.00117 ...
 $ n#ft  : logi  NA NA NA NA NA NA ...
 $ n#pt  : num  0.02515 -0.02394 0.0154 0.01224 0.00301 ...

我正在尝试找到一种方法来防止这种强制变为逻辑,我认为这会导致后续错误。

我通过搜索 SO 找到了this Q+A,但是我正在工作,并且不希望被允许编辑注册表以更改 DWORD 的默认值,如suggested(我了解此处设置的值确定在 Microsoft 猜测数据类型并轰炸我的阅读之前需要多少个 NA)。

现在,我认为最好的解决方案是反转 Excel 中的数据,然后将其倒置读入 R。

我喜欢一个好的hack,但肯定有更好的解决方案吗?

【问题讨论】:

尝试此处列出的其他 Excel 接口到 R:rwiki.sciviews.org/doku.php?id=tips:data-io:ms_windows 见***.com/questions/9062761/… 【参考方案1】:

这不是错误,而是此处记录的 ODBC 的一个特性(注意缺少 R)

http://support.microsoft.com/kb/257819/en-us

(长页面,检查“混合数据类型”)。

由于使用 ODBC 读取 Excel 文件相当有限,我更喜欢 Gabor 提到的替代方法之一,更喜欢 XLConnnect。

【讨论】:

以上是关于RODBC 读取错误,其中 excel 列包含前导 NA的主要内容,如果未能解决你的问题,请参考以下文章

R中用RODBC包读取excel数据

使用 RODBC 读取具有多个标题的 Excel 文件

Excel、OleDb 和前导零

在 Apache Spark 中,我有一个数据框,其中有一列包含字符串(它的日期),但月份和日期中缺少前导零

使用 RODBC 将公式写入 Excel 文件

使用 Pandas 读取 CSV 时如何在列中保持前导零?