有很多页面展示了如何用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,但我们可以通过多种方式解决此问题。
-
将字符向量转换为列表,在这种情况下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"
-
如果没有长度为零的字符串,那么使用它来表示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
-
使用NA而不是NULL。
x <- c("None", "Some", "NULL", "Many", "All") replace(x, x == "NULL", NA) ## [1] "None" "Some" NA "Many" "All"
-
另一种方法是使用两个矢量。一个用于数据,另一个用于指示值是否丢失。那么null组件中的值可以是任何值。
x <- c("None", "Some", "NULL", "Many", "All") x_null <- c(FALSE, FALSE, TRUE, FALSE, FALSE)
-
许多包可以处理多种类型的缺失值。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包表示中不同类型的缺失值使用第二列和标记包为此使用了属性。
有关其他也缺少价值包。
值得记住NULL
和NA
之间的区别。NA
的值是一个不可靠的值,NULL
没有任何值。为了使第二个输出与第一个输出相同,您需要与以下相同的东西
column <- c("None", "Some", "NULL", "Many", "All")
column <- column[column != "NULL"]
这会创建一个较短的矢量,这就是str_replace不喜欢它的原因