Я читаю таблицу SQL в R, используя следующий запрос:
data = sqlQuery(con, "select * from Quant.dbo.Indiv_data where Date > '19020101'", stringsAsFactors = FALSE, as.is = TRUE, na.string = "NULL", nullstring = "NA")
Использование as.is
заключается не в приведении исходных типов столбцов, а в том, чтобы оставить типы столбцов таблицы SQL как есть. Единственная проблема заключается в том, что ячейки NULL в таблице SQL не обрабатываются должным образом, и я получаю следующий результат:
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]
, который изначально был NULL в таблице SQL, и сделаете следующее:
is.na(data$VAL[5])
вы получаете FALSE
, но при выполнении data$VAL[5] == "NA"
получаете TRUE
Как я могу сделать все NULL
ячеек в таблице SQL NA
в фрейме данных в R, используя as.is
в sqlQuery()
?
Спасибо,
NULL
, а строки NULL. Это правильно? - person joran   schedule 03.10.2013NA_character_
? - person agstudy   schedule 03.10.2013NULL
, а не строка. - person Mayou   schedule 03.10.2013NA
и<NA>
. Последнее — это просто то, как R печатает значение NA в случае символьной переменной, чтобы отличить ее от других строк. Тот факт, что R сделал это и чтоna.string = "NULL"
вызвало такое поведение, убедительно свидетельствует о том, что значения NULL в вашей базе данных на самом деле являются строками. Таким образом, числовые столбцы с этими значениями NULL импортируются как символьные переменные. - person joran   schedule 03.10.2013as.is
? - person Mayou   schedule 03.10.2013numeric(18,9)
. Я полагаю, что не могу использоватьas.is
должным образом.. вы думаете, что это так? - person Mayou   schedule 03.10.2013as.is
и позволите R выбрать тип для каждого столбца? - person joran   schedule 03.10.2013as.is
, числовые столбцы остаются числовыми. Я не ошибся в том, что находится в моей таблице, и наконец нашел решение: указать толькоas.is
для столбцов, которые вы хотите сделатьcharacter
илиDate
, иFALSE
для остальных. Если я полностью исключаюas.is
, все столбцы будут в порядке, за исключением второго столбца: этот столбец является столбцом символов, но R отобразит его как числовой. - person Mayou   schedule 03.10.2013