代码之家  ›  专栏  ›  技术社区  ›  Brian

在R中有条件地用NA替换值

  •  1
  • Brian  · 技术社区  · 2 年前

    我有一个非常简单的问题,让我发疯!!我试图在R中有条件地用NA替换值。以下是我迄今为止使用dplyr包所做的尝试。

    第一次尝试

    want = as.data.frame(
      have %>% 
        mutate(gender = replace(gender, gender == "I Do Not Wish to Disclose", NA))
    )
    

    第二次尝试

    want = as.data.frame(
      have %>% 
        mutate(gender = ifelse(gender == "I Do Not Wish to Disclose", NA, gender))
    )
    

    第一个给了我一个错误(天知道为什么?!!)第二个运行时没有出错,但变为女性->1,男性->3和NA(我不想透露)——>2.

    谁能帮我一下吗? 这让我快疯了。。。

    谢谢 布瑞恩

    1 回复  |  直到 2 年前
        1
  •  2
  •   akrun    2 年前

    在这种情况下,列是 factor .皈依 character 它应该会起作用

    library(dplyr)
    have %>% 
        mutate(gender = as.character(gender), 
        gender = replace(gender, gender == "I Do Not Wish to Disclose", NA))
    

    价值观的变化 gender 是当它被强制为其整数存储值时

    as.integer(factor(c("Male", "Female", "Male")))
    
        2
  •  0
  •   Andrea M    2 年前

    我会使用非常简洁的函数 na_if() 从…起 dplyr .

    library(dplyr)
    
    have <- data.frame(gender = c("F", "M", "NB", "I Do Not Wish to Disclose"))
    
    have |> mutate(gender2 = na_if(gender, "I Do Not Wish to Disclose"))
    

    输出:

    #>                      gender gender2
    #> 1                         F       F
    #> 2                         M       M
    #> 3                        NB      NB
    #> 4 I Do Not Wish to Disclose    <NA>
    

    于2022年4月19日由 reprex package (v2.0.1)