繁体   English   中英

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

[英]Is there a way to replace a character in a vector with a NULL value in R?

有很多页面显示如何用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

代表 package (v2.0.1) 于 2022 年 1 月 31 日创建

值得记住NULLNA之间的区别。 NA值是一个狡猾的值, NULL没有任何价值。 为了使第二个 output 与第一个 output 相同,您将具有与以下相同的内容

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

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

字符向量不能包含 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 function 来测试这一点——对于非零长度的字符串,它返回 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 package 具有允许定义缺失值的 character.item class。

     library(memisc) xx <- x missing.values(xx) <- "NULL"

    有关其他缺失值包的信息,请参阅缺失数据任务视图

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM