【问题标题】:recode variables with NAs with ifelse() in R在 R 中使用 ifelse() 重新编码带有 NA 的变量
【发布时间】:2013-07-07 10:18:37
【问题描述】:

我正在将两个二进制变量重新编码为新变量,以便第一个变量中的任何 1 在新变量中取 0,并保留第二个变量中的所有数字。下面的代码显示了我想要生成的逻辑。但是,当我运行此代码时,使用 ifelse() 重新编码只是重新创建 x2,而没有合并第一个使用 x1 的 1 作为 0 的 ifelse() 行。想法?

set.seed(123)
x1 <- sample(c(0,1,NA), 20, replace = TRUE)
x2 <- sample(c(0,1,NA), 20, replace = TRUE)

recode <- ifelse(x1 == 1, 0, NA)
recode <- ifelse(x2 == 1, 1, recode)
recode <- ifelse(x2 == 0, 0, recode)

table(recode); table(x2)

谢谢

【问题讨论】:

    标签: r if-statement


    【解决方案1】:

    对不起,但它会做你想做的事。您可能忘记的问题是 NA 与任何东西的比较结果也是 NA,所以如果x2 == NAifelse( x2 == 0, yes, no ) 返回 NA(而不是 no)。

    最好试试

    recode <- rep( NA, length( x1 ) )
    recode[ x1 == 1 ] <- 0
    recode[ ! is.na( x2 ) ] <- x2[ ! is.na( x2 ) ]
    

    【讨论】:

      【解决方案2】:

      也许你想要这个?

      ifelse(is.na(x2), ifelse(x1 == 1, 0, NA), x2)
      

      【讨论】:

        【解决方案3】:

        您覆盖了这些结果。帮助('ifelse')页面的详细信息部分的相关行是:

         Missing values in test give missing values in the result.
        
        recode <- ifelse(x1 == 1, 0, NA)
        recode[ !is.na(x2)] <- x2[!is.na(x2)]
        

        【讨论】:

          【解决方案4】:

          我发布这个只是为了弄清楚是否有某种原因不建议使用这个班轮:

          recode <- ifelse(x1 %in% 1 & is.na(x2), 0, x2)
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2020-10-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-01-21
            • 1970-01-01
            相关资源
            最近更新 更多