具有多个条件的R中的Ifelse语句

use*_*490 9 if-statement r

使用以下示例数据,我试图根据三个条件变量(Denial1,Denial2和Denial3)的值创建一个新变量"Den"(值"0"或"1").

如果三个条件变量中的任何一个具有"0"并且仅当具有其中值的EACH条件变量具有值"1"(例如,不是NA)时,我想要"0".

structure(list(Denial1 = NA_real_, Denial2 = 1, Denial3 = NA_real_, 
Den = NA), .Names = c("Denial1", "Denial2", "Denial3", "Den"
), row.names = 1L, class = "data.frame")
Run Code Online (Sandbox Code Playgroud)

我已经尝试了以下两个命令导致"Den"缺少值NA:

DF$Den<-ifelse (DF$Denial1 < 1 | DF$Denial2 < 1 | DF$Denial3 < 1, "0", "1")

DF$Den<-ifelse(DF$Denial1 < 1,"0", ifelse (DF$Denial2 < 1,"0", ifelse(DF$Denial3 < 1,"0", "1")))
Run Code Online (Sandbox Code Playgroud)

有人可以演示如何做到这一点?

use*_*490 12

根据@jaimedash和@Old_Mortality的建议,我找到了一个解决方案:

DF$Den <- ifelse(DF$Denial1 < 1 & !is.na(DF$Denial1) | DF$Denial2 < 1 &  
!is.na(DF$Denial2) | DF$Denial3 < 1 & !is.na(DF$Denial3), "0", "1")
Run Code Online (Sandbox Code Playgroud)

然后,如果条件变量的所有值都是NA,则确保NA值:

DF$Den <- ifelse(is.na(DF$Denial1) & is.na(DF$Denial2) & is.na(DF$Denial3), 
NA, DF$Den)
Run Code Online (Sandbox Code Playgroud)


Old*_*ity 7

怎么样?

DF$Den<-ifelse (is.na(DF$Denial1) | is.na(DF$Denial2) | is.na(DF$Denial3), "0", "1")
Run Code Online (Sandbox Code Playgroud)