2016-04-01 13 views
3

Mit den folgenden Beispieldaten versuche ich eine neue Variable "Den" (Wert "0" oder "1") basierend auf den Werten der drei bedingten Variablen (Denial1, Denial2, und Leugnung3).Ifselse-Anweisung in R mit mehreren Bedingungen

Ich möchte eine "0", wenn eine der drei bedingten Variablen eine "0" und eine "1" hat, nur wenn jede bedingte Variable, die einen Wert in ihr hat, einen Wert von "1" hat (zB isn ' t NA).

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

Ich habe die beiden folgenden Befehle versucht, die „Den“ in einem fehlenden Wert NA ergeben:

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"))) 

Könnte jemand zeigen, wie dies zu tun?

+0

möglicherweise hilfreich: http://stackoverflow.com/questions/18012222/nested-ifelse-statement-in-r?rq=1 – jaimedash

+1

@jaimedash Ihnen danken für die Link, ich habe das gelesen, bevor ich die Frage gepostet habe und das Skript für verschachtelte ifelse-Anweisungen oben eingefügt habe. Ich muss irgendwo noch einen Fehler machen. – user3594490

+0

Sie brauchen sowohl 1) nicht "NA" und 2) '<1". Es ist hässlich, aber mehrere dieser '(DF $ Denial1 <1 &! Is.na (DF $ Denial1)) mit' & 'zu verketten sollte funktionieren. (Bearbeitet, um von '&&' zu elementwise '&' zu wechseln) – jaimedash

Antwort

1

Wie wäre es?

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

Ich werde versuchen zu verdeutlichen: Ich will keine "0", wenn der Wert für eine bedingte Variable fehlt. Ich möchte eine "0" in "Den", wenn eine der bedingten Variablen eine "0" hat. Ich möchte nur eine "1" in "Den", wenn jede bedingte Variable, die nicht fehlt, den Wert "1" hat. Hilft das? – user3594490

+0

und was willst du, wenn man fehlt? –

+0

Wenn alle 3 bedingten Variablen Werte fehlen, dann würde ich wollen, dass "Den" fehlt. Aber ich möchte, dass der Wert von "Den" auf bedingten Variablen mit Werten basiert, die nicht fehlen (dh "0" oder "1". Ihr Beispiel oben gibt mir eine "0", wenn diese Bedingung eine "1" ergeben sollte "Weil die einzige Bedingungsvariable mit einem Wert (" Denial2 ") einen Wert von" 1 "hat. – user3594490

1

Basierend auf Anregungen von @jaimedash und @Old_Mortality fand ich eine Lösung:

`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")` 

dann einen Wert von NA zu gewährleisten, wenn alle Werte der Bedingungsvariablen sind NA:

DF$Den <- ifelse(is.na(DF$DF$Denial1 & is.na(DF$DF$Denial2 & is.na(DF$DF$Denial3, NA,DF$Den) 
3

Es gibt eine einfachere Lösung dafür. Was Sie beschreiben, das natürliche Verhalten des & Operator und kann somit primatively erfolgen:

> c(1,1,NA) & c(1,0,NA) & c(1,NA,NA) 
[1] TRUE FALSE NA 

Wenn alle 1 sind, dann wird 1 zurückgegeben. Wenn alle 0 sind, dann 0. Wenn alle NA sind, dann NA.

In Ihrem Fall würde der Code sein, denn diese

DF$Den<-DF$Denial1 & DF$Denial2 & DF$Denial3 

Um zu arbeiten, müssen Sie in character aufhören zu arbeiten und numeric oder logical Typen verwenden.

1

Sehr einfache Verwendung von any

df <- <your structure> 

df$Den <- apply(df,1,function(i) {ifelse(any(is.na(i)) | any(i != 1), 0, 1)})