【问题标题】:Replace string 'NULL' with NA用 NA 替换字符串 'NULL'
【发布时间】:2021-07-10 22:56:22
【问题描述】:

大多数搜索结果都与此相反,将 NULL 或 NA 转换为字符串 'NA'。我不希望这样,我想将 'NULL' 的字符串实例转换为 NA,但出现错误:

bla <- c('foo', 'bar', NA, 'NULL')

str_replace_all(bla, 'NULL', NA)
Error: `replacement` must be a character vector

也试过了:

str_replace_all(bla, 'NULL', NA_real_)
Error: `replacement` must be a character vector

如何在 bla 中将 'NULL' 的情况转换为 NA?

[编辑]

明确地说,我实际上是在 dplyr 链中执行此操作,例如

bla <- data.frame(s = c('foo', 'bar', NA, 'NULL'), n = 1:4 )
> bla
     s n
1  foo 1
2  bar 2
3 <NA> 3
4 NULL 4
> bla %>% mutate(s = str_replace_all(bla, 'NULL', NA_real_))
Error: Problem with `mutate()` input `s`.
x `replacement` must be a character vector
ℹ Input `s` is `str_replace_all(bla, "NULL", NA_real_)`.

【问题讨论】:

  • ifelse(bla == "NULL", NA, bla)
  • 你可能需要NA_character_
  • 我重新打开了帖子,因为帖子是关于str_replaceNA的使用

标签: r stringr


【解决方案1】:

只需使用== 而不是正则表达式子字符串替换

bla[bla == "NULL"] <- NA

-输出

bla
[1] "foo" "bar" NA    NA   

使用str_replace/str_replace_all,为NA 指定正确的类型(默认情况下,NA 是合乎逻辑的,会与原始向量类型发生类型冲突

根据?NA

NA 是一个长度为 1 的逻辑常数,其中包含一个缺失值指示符。 NA 可以强制转换为除 raw 之外的任何其他向量类型。还有其他支持缺失值的原子向量类型的常量NA_integer_、NA_real_、NA_complex_和NA_character_:都是R语言中的保留字。

str_replace_all(bla, 'NULL', NA_character_)
[1] "foo" "bar" NA    NA   

另外,str_replace 主要用于子字符串替换,而不是固定的完整字符串替换(因为我们也可能会发现效率下降)


tidyverse中还有na_if

library(dplyr)
bla %>% 
    mutate(s = na_if(s, "NULL"))
     s n
1  foo 1
2  bar 2
3 <NA> 3
4 <NA> 4

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-20
    • 2014-03-04
    • 2021-11-17
    • 2023-03-26
    相关资源
    最近更新 更多