【问题标题】:How do I convert a text string of NULL to a number?如何将 NULL 的文本字符串转换为数字?
【发布时间】:2013-01-21 08:14:00
【问题描述】:

我有来自 SQL 的输入数据,其中的字段是字符串“NULL”,这样

unique(file$x) 

返回

Levels: 1 10 14 8 NULL

我希望任何“NULL”的结果变为“0”,然后使用 as.numeric() 进行转换。

我试过了:

i <- 1
for(i <= nrow(file) {
    if(file$x[i] == "NULL") {
        file$x[i] <- 0
    }
i <- i + 1
}

但是,我现在得到的结果是 NULL 已经简单地变成了,我仍然无法将它转换为数字 0。

【问题讨论】:

  • 如何将数据读入 R?这就是您应该解决此问题的步骤。

标签: string r numeric


【解决方案1】:

如果您使用read.csv 阅读此内容,请设置选项na.strings='NULL'。这会将file$x 导入为numeric,而不是factor,用数字NAs 对象代替NULL 字符串。然后用0s替换NAs:

file$x[is.na(file$x)] <- 0

【讨论】:

  • 谢谢!这解决了问题(尽管我确信许多其他答案也有效)。
  • 对我来说似乎通常 file$x[is.na(file$x)[
【解决方案2】:

在您的 SQL 查询中添加:ISNULL(myNullableField, 0)

这确保 - 如果您的值为 NULL - 它被转换为 0

我猜这是一个选择查询?

【讨论】:

  • 在这种情况下,我建议通过 SQL 而不是 R.
  • 如果我使用计数,这条线在哪里?例如:SELECT a.id, count(b.variable) from a, b where a.id = b.id;
  • 它适用于任何可能最终成为NULL 的领域,所以我认为它会在b.variable 左右为COUNT(ISNULL(b.variable, 0))
  • 我收到一条错误消息:调用本机函数“ISNULL”时参数计数不正确
  • 这很奇怪,您的() 是否正确放置?ISNULL 需要 2 个参数,可空字段和 NULL 替换。所以我的示例是正确的。
【解决方案3】:

在 R 中:

file$x[file$x=="NULL"] <- 0

【讨论】:

  • @sebastion-c 我收到警告消息:警告消息:在[&lt;-.factor(*tmp*, file$count_profile3 == "NULL", value = c(1L, : invalid factor level,生成的 NA
  • 尝试file$x &lt;- as.character(file$x),然后运行该线路,但如果我对file$x 的外观有更好的了解会有所帮助。
【解决方案4】:

虽然您应该从源头(即 SQL)解决此问题,但这里有一种方法可以解决。

将因子转换为字符,然后将 NA 替换为 0

我不确定这是否是处理非常大的数据的正确方法。

> x <- as.factor(c('1', '10', '14', '8', 'NULL'))
> y <- as.numeric(as.character(x))
Warning message:
NAs introduced by coercion 
> y[is.na(y)] <- 0
> y
[1]  1 10 14  8  0

【讨论】:

    猜你喜欢
    • 2012-04-12
    • 2021-04-02
    • 2021-02-27
    • 2012-05-16
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 2020-10-07
    相关资源
    最近更新 更多