0

我正在将两个二进制变量重新编码为新变量,以便第一个变量中的任何 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)

谢谢

4

4 回答 4

4

对不起,但它做了你想做的事。您可能忘记的问题是 NA 与任何东西的比较结果也是 NA,因此如果 . 则ifelse( x2 == 0, yes, no )返回 NA (而不是nox2 == NA

更好的尝试

recode <- rep( NA, length( x1 ) )
recode[ x1 == 1 ] <- 0
recode[ ! is.na( x2 ) ] <- x2[ ! is.na( x2 ) ]
于 2013-07-09T17:33:48.027 回答
3

也许你想要这个?

ifelse(is.na(x2), ifelse(x1 == 1, 0, NA), x2)
于 2013-07-09T17:35:39.213 回答
2

你覆盖了这些结果。帮助('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)]
于 2013-07-09T17:37:15.690 回答
0

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

recode <- ifelse(x1 %in% 1 & is.na(x2), 0, x2)
于 2013-07-09T21:44:00.330 回答