Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用R中的ifelse()使用NAs重新编码变量_R_If Statement - Fatal编程技术网

使用R中的ifelse()使用NAs重新编码变量

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

我将两个二进制变量重新编码到新变量中,这样第一个变量中的任何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)
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)