1

我正在使用以下查询读取 R 中的 SQL 表:

在此处输入图像描述

data = sqlQuery(con, "select * from Quant.dbo.Indiv_data where Date > '19020101'", stringsAsFactors = FALSE, as.is = TRUE, na.string = "NULL", nullstring = "NA")

使用as.isis 不强制转换任何原始列类型,并保持 SQL 表的列类型不变。唯一的问题是 SQL 表中的“NULL”单元格没有得到正确处理,我得到以下结果:

                      Date  issueid    ReturnBA          VAL           EQ          EFF        SIZE FSCR MSCR          SY
 1 1984-12-31 00:00:00.000 00101601  .136539672 45.200000000 71.400000000 47.750000000 1.295611077 <NA> <NA>  .019447467
 2 1984-12-31 00:00:00.000 00105401  .023985560 57.800000000 48.800000000 18.500000000 2.296439211 <NA> <NA> -.005433357
 3 1984-12-31 00:00:00.000 00109801 -.094036769 60.200000000 56.800000000 79.200000000 1.858392810 <NA> <NA> -.451707020
 4 1984-12-31 00:00:00.000 00112401 -.006317470 46.400000000 64.800000000 54.250000000 1.900126698 <NA> <NA>  .009264280
 5 1984-12-31 00:00:00.000 00116601  .124830071         <NA> 76.200000000 48.500000000 2.070191229 <NA> <NA>        <NA>
 6 1984-12-31 00:00:00.000 00117801  .010923909 25.500000000 29.000000000 40.666666667 2.200806054 <NA> <NA> -.005433421

请注意,“NULL”单元格被转换为<NA>,而不是NA。为了尝试处理这种情况,我尝试了以下方法:

 data = sqlQuery(con, "select * from Quant.dbo.Indiv_data where Date > '19020101'",
  stringsAsFactors = FALSE, as.is = TRUE, na.string = "NULL", nullstring = "NA")

但是,这会将每个 NULL 单元格设置为字符串 NA而不是符号 NA。换句话说,如果您以 的 为例data$VAL[5],它在 SQL 表中最初为 NULL,然后执行以下操作:

is.na(data$VAL[5])你得到FALSE但是当 data$VAL[5] == "NA"你得到TRUE

在使用in时,如何使NULLSQL 表NA中的所有单元格都在 R 的数据框中?as.issqlQuery()

谢谢,

4

1 回答 1

0

诀窍是似乎as.is将所有列(日期列除外)转换为character列。因此,R 打印<NA>为字符向量/列的空符号。

解决方案是as.is仅指定前两列,让 R 处理其他列类型。在这种情况下,R 会适当地将其余列转换为数字,并NA为 SQL 中的等效空单元指定空符号。

于 2013-10-03T17:05:23.200 回答