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

Conditionally replace values with NA in R

我正在尝试有条件地用 R 中的 NA 替换值。

这是我到目前为止使用 dplyr 包尝试过的内容。

数据

have <- data.frame(id = 1:3,
                   gender = c("Female", "I Do Not Wish to Disclose", "Male"))

先试试

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))
    )

这运行没有错误,但将 Female 变成 1Male 变成 3I Do Not Wish to Disclose 变成 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")))

我会使用 dplyr 中非常简洁的函数 na_if()

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>

reprex package (v2.0.1)

于 2022-04-19 创建