用 NA 替换字符串 'NULL'

时间:2021-07-10 22:56:22

标签: r stringr

大多数搜索结果给了我相反的结果,将 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

如何将 'NULL' 的情况转换为 bla 中的 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_)`.

1 个答案:

答案 0 :(得分:4)

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

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