有没有办法用R中的NULL值替换向量中的字符



有很多页面展示了如何用NA或特定值替换NULL值,但我还没有看到任何显示如何使用其他方法(在向量中用NULL替换值(的内容。有办法做到这一点吗?这是我{tidyverse}尝试的一个代表:

library(tidyverse)
# character vectors can have null values
c("None", "Some", NULL, "Many", "All")
#> [1] "None" "Some" "Many" "All"
# but is there a way to replace a string in a vector with null?
c("None", "Some", "NULL", "Many", "All") %>%
str_replace("NULL", NULL)
#> Error: `replacement` must be a character vector

创建于2022-01-31由reprex包(v2.0.1(

字符向量不能包含NULL,但我们可以通过多种方式解决此问题。

  1. 将字符向量转换为列表,在这种情况下NULL可以是元素

    x <- c("None", "Some", "NULL", "Many", "All")
    x_list <- replace(as.list(x), x == "NULL", list(NULL))
    str(x_list)
    ## List of 5
    ##  $ : chr "None"
    ##  $ : chr "Some"
    ##  $ : NULL
    ##  $ : chr "Many"
    ##  $ : chr "All"
    
  2. 如果没有长度为零的字符串,那么使用它来表示NULL。这与R提供nzchar函数来测试这一点非常常见——对于长度为非零的字符串,它返回TRUE,否则返回FALSE。

    x <- c("None", "Some", "NULL", "Many", "All")
    x2 <- replace(x, x == "NULL", "")
    x2
    ## [1] "None" "Some" ""     "Many" "All" 
    nzchar(x2)
    ## [1]  TRUE  TRUE FALSE  TRUE  TRUE
    
  3. 使用NA而不是NULL。

    x <- c("None", "Some", "NULL", "Many", "All")
    replace(x, x == "NULL", NA)
    ## [1] "None" "Some" NA     "Many" "All" 
    
  4. 另一种方法是使用两个矢量。一个用于数据,另一个用于指示值是否丢失。那么null组件中的值可以是任何值。

    x <- c("None", "Some", "NULL", "Many", "All")
    x_null <- c(FALSE, FALSE, TRUE, FALSE, FALSE)
    
  5. 许多包可以处理多种类型的缺失值。memisc包为此使用了一个S4类"character.item"

    library(memisc)
    xx <- x
    missing.values(xx) <- "NULL"
    xx
    ## Item (measurement: nominal, type: character, length = 5) 
    ##
    ## [1:5] None Some *NULL Many All
    is.missing(xx)
    ## [1] FALSE FALSE  TRUE FALSE FALSE
    

    naniar包表示中不同类型的缺失值使用第二列和标记包为此使用了属性。

    有关其他也缺少价值包。

值得记住NULLNA之间的区别。NA的值是一个不可靠的值,NULL没有任何值。为了使第二个输出与第一个输出相同,您需要与以下相同的东西

column <- c("None", "Some", "NULL", "Many", "All")
column <- column[column != "NULL"]

这会创建一个较短的矢量,这就是str_replace不喜欢它的原因

相关内容

  • 没有找到相关文章

最新更新