有没有办法用 R 中的 NULL 值替换向量中的字符?
Is there a way to replace a character in a vector with a NULL value in R?
有很多页面展示了如何将 NULL
值替换为 NA
或特定值,但我还没有看到任何展示如何进行相反操作的内容(用向量中的 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
由 reprex package (v2.0.1)
创建于 2022-01-31
值得记住 NULL
和 NA
之间的区别。 NA
值是一个狡猾的值,NULL
没有任何价值。为了使第二个输出与第一个输出相同,您将具有与以下相同的内容
column <- c("None", "Some", "NULL", "Many", "All")
column <- column[column != "NULL"]
这会创建一个较短的向量,这就是 str_replace 不喜欢它的原因。
字符向量不能包含 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
函数来对此进行测试——对于 non-zero 长度的字符串 returns 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"
另一种方法是使用两个向量。一个用于数据,一个用于指示值是否缺失。那么空组件中的值可以是任何值。
x <- c("None", "Some", "NULL", "Many", "All")
x_null <- c(FALSE, FALSE, TRUE, FALSE, FALSE)
许多包可以处理多种类型的缺失值。 memisc 包为此使用 S4 class、"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 包表示不同类型的缺失值
使用第二列和标记的数据框的一列
包为此使用属性。
有关其他信息,请参阅 Missing Data Task View
还缺少价值包。
有很多页面展示了如何将 NULL
值替换为 NA
或特定值,但我还没有看到任何展示如何进行相反操作的内容(用向量中的 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
由 reprex package (v2.0.1)
创建于 2022-01-31值得记住 NULL
和 NA
之间的区别。 NA
值是一个狡猾的值,NULL
没有任何价值。为了使第二个输出与第一个输出相同,您将具有与以下相同的内容
column <- c("None", "Some", "NULL", "Many", "All")
column <- column[column != "NULL"]
这会创建一个较短的向量,这就是 str_replace 不喜欢它的原因。
字符向量不能包含 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
函数来对此进行测试——对于 non-zero 长度的字符串 returns 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"
另一种方法是使用两个向量。一个用于数据,一个用于指示值是否缺失。那么空组件中的值可以是任何值。
x <- c("None", "Some", "NULL", "Many", "All") x_null <- c(FALSE, FALSE, TRUE, FALSE, FALSE)
许多包可以处理多种类型的缺失值。 memisc 包为此使用 S4 class、
"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 包表示不同类型的缺失值 使用第二列和标记的数据框的一列 包为此使用属性。
有关其他信息,请参阅 Missing Data Task View 还缺少价值包。