Microsoft R Server SQL NULL/отсутствующие значения

У меня возникла проблема с использованием RxSqlServerData() в Microsoft R для импорта таблицы из базы данных SQL Server. Моя база данных на сервере SQL содержит строки, которые имеют как пробелы, так и значения NULL. Когда я запускаю RxSqlServerData, они оба импортируются как «отсутствующие» значения, в частности, <NA>

Есть ли что-то, что я могу указать в аргументе colInfo, чтобы импортировать их как факторы, скажем, «Нет» или что-то подобное.

Спасибо.


person Thomas Moore    schedule 29.06.2017    source источник
comment
Вы получаете тот же результат с RODBC или odbc?   -  person Hong Ooi    schedule 29.06.2017


Ответы (1)


Таким образом, после того, как вы импортировали данные, вы можете использовать функцию rxDataStep, а в аргументе transforms вы определяете, как следует обрабатывать отсутствующие значения.

Примером этого является то, что у меня есть таблица с некоторыми столбцами, а некоторые из столбцов имеют нулевые значения или - в случае строковых столбцов - потенциально пустую строку. Мое определение таблицы выглядит так:

CREATE TABLE dbo.tb_MissingValue(RowID int identity PRIMARY KEY,
                                 Col1 int,
                                 Col2 int,
                                 Col3 varchar(50))

И я вставил данные так:

INSERT INTO dbo.tb_MissingValue(Col1, Col2, Col3)
VALUES (1, null, 'Hello'),
        (null, 2, 'world'),
        (3, 1, ''),
        (4, 2, 'Again');

Мой код R выглядит следующим образом для извлечения данных из базы данных:

connString <- "Driver=SQL Server;
               Server=win10-dev; 
               Database=RTest;
               Uid=sa;
               Pwd=secret_stuff"

missingData <- RxSqlServerData(connectionString = connString, 
                 sqlQuery = "SELECT * FROM dbo.tb_MissingValue")

Глядя на данные во фрейме данных missingData, это выглядит так:

  RowID Col1 Col2  Col3
  1     1    1   NA Hello
  2     2   NA    2 world
  3     3    3    1  <NA>
  4     4    4    2 Again

На данном этапе я могу использовать функцию rxDataStep и аргумент transforms, как я упоминал выше:

nonMissing <- rxDataStep(inData = missingData,
                     transforms = list(
                     Col1 = ifelse(is.na(Col1), "Missing", Col1),
                     Col2 = ifelse(is.na(Col2), "Missing", Col2),
                     Col3 = ifelse(is.na(Col3), "Missing", Col3)))

Затем, когда я просматриваю данные nonMissing, я получаю следующее:

  RowID    Col1    Col2    Col3
  1     1       1 Missing   Hello
  2     2 Missing       2   world
  3     3       3       1 Missing
  4     4       4       2   Again

Конечно, вы также можете обработать отсутствующие значения в исходном запросе. Это, наверное, то, что я бы сделал.

Надеюсь это поможет!

Нильс

person Niels Berglund    schedule 05.07.2017