【问题标题】:How to keep N/A as N/A when using an ifelse statement?使用 ifelse 语句时如何将 N/A 保持为 N/A?
【发布时间】:2022-11-12 14:16:41
【问题描述】:

我正在重新编码df,其中包含“是”、“否”或“不适用”的列。我想将“是”重新编码为 1,将“否”重新编码为 0,并将“N/A”保持为“N/A”。

我写了以下代码:

df$first_column <-ifelse(df$first_column=="yes",1,0)

但是,这会将N/A 替换为0。解决此问题的最简单方法是什么?

这是可重现的df:

structure(list(first_column = c("yes", "no", "N/A", "yes")), row.names = c(NA, 
4L), class = "data.frame")

【问题讨论】:

    标签: r if-statement rstudio


    【解决方案1】:

    如果你想避免嵌套if_else

    df <-mutate(df, first_column = case_when(first_column=="yes" ~ 1,
                                             first_column=="no" ~ 0,
                                             T ~ first_column))
    

    【讨论】:

      【解决方案2】:

      如果我们想避免任何包,请尝试使用嵌套的 ifelse

      df$first_column <- ifelse(df$first_column == "N/A", "N/A", 
           ifelse(df$first_column == "yes",1,0))
      

      -输出

      df$first_column
      [1] "1"   "0"   "N/A" "1"  
      

      注意:"N/A" 不是 NA。最好转换为NA,因为"N/A" 是字符,这会将整数预期的二进制列更改为字符。会更好

      with(df, replace(first_column, first_column == "N/A", NA) == "yes")
      [1]  TRUE FALSE    NA  TRUE
      

      或者可以使用recode

      library(dplyr)
       df %>%
         mutate(first_column = recode(first_column, yes = 1, no = 0))
      

      -输出

        first_column
      1            1
      2            0
      3           NA
      4            1
      

      【讨论】:

        猜你喜欢
        • 2018-08-17
        • 2016-04-01
        • 2015-05-04
        • 2018-09-02
        • 2014-02-12
        • 2016-04-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多