使用R中的ifelse()使用NAs重新编码变量
我将两个二进制变量重新编码到新变量中,这样第一个变量中的任何1都会在新变量中取0,第二个变量中的所有数字都会保留。下面的代码显示了我想要生成的逻辑。但是,当我运行这段代码时,使用ifelse()重新编码只会重新创建x2,而没有合并使用x1的1作为0的第一个ifelse()行。想法使用R中的ifelse()使用NAs重新编码变量,r,if-statement,R,If Statement,我将两个二进制变量重新编码到新变量中,这样第一个变量中的任何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)
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)
set.seed(123)
x1很抱歉,但它做了您想做的事情。您可能已经忘记的问题是,将NA与任何事物进行比较的结果也是NA,因此ifelse(x2==0,yes,no)
返回NA(而不是no
),如果x2==NA
最好试试
recode <- rep( NA, length( x1 ) )
recode[ x1 == 1 ] <- 0
recode[ ! is.na( x2 ) ] <- x2[ ! is.na( x2 ) ]
重新编码也许你想要这个
ifelse(is.na(x2), ifelse(x1 == 1, 0, NA), x2)
你把结果写得太多了。帮助(“ifelse”)页面详细信息部分的相关行为:
测试中的缺失值在结果中给出缺失值。
重新编码我发布这篇文章只是想弄清楚是否有什么原因不建议使用这一行:
recode <- ifelse(x1 %in% 1 & is.na(x2), 0, x2)
重新编码
recode <- ifelse(x1 %in% 1 & is.na(x2), 0, x2)