1

我在 Microsoft R 中使用 RxSqlServerData() 从 SQL Server 数据库导入表时遇到了一些问题。我在 SQL Server 中的数据库包含同时具有空白和 NULL 值的行。当我运行 RxSqlServerData 时,这些都被导入为“缺失”值,具体来说,<NA>

我可以在colInfo参数中指定一些可以将这些作为因素导入的东西,比如“无”或类似的东西。

谢谢。

4

1 回答 1

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

您当然也可以处理原始查询中的缺失值。这大概就是我会做的。

希望这可以帮助!

尼尔斯

于 2017-07-05T19:07:55.983 回答