2016-10-07 6 views
0

Ich kann wirklich nicht meinen Kopf darum drehen, wie ich das | benutze Betreiber falsch. Da mein Code ohne ihn korrekt zu funktionieren scheint, nehme ich an, dass ich nicht richtig verstanden habe, was er tut. Aber ich konnte keine Erklärung finden, die mir dabei hilft.Logischer 'oder' Operator korrekt mit mehreren Bedingungen verwenden?

x1 <- c(1,2,3,1,2,3) 
x2 <- c(4,5,6,6,5,4) 
df <- data.frame(x1,x2) 

#simple test: find out which rows have value 1 for x1 and value 4 for x2 at the same time 
which(df$x1 == 1 & df$x2 == 4) 
[1] 1 

#problem: find out which rows have value 1 for x1 and either value 4 or 6 for x2 
which(df$x1 == 1 & df$x2 == 4 | 6) 
[1] 1 2 3 4 5 6 

hier sollte die Rückkehr [1] 1 4 sein, aber aus irgendeinem Grund bekomme ich nur alle Reihe indicies zurück ...

Antwort

1

Sie benötigen df$x1 == 1 & (df$x2 == 4 | df$x2 == 6)

Zeit schreiben Ihren Ausdruck als

ausgewertet

(df$x1 == 1 & df$x2 == 4) | 6

aufgrund Operator Vorrang, das ist immer wahr.

2

Versuchen

which((df$x1 == 1) & (df$x2 %in% c(4,6))) 

oder

which((df$x1 == 1) & ((df$x2 == 4)|(df$x2 == 6))) 

jedoch die zweite Lösung ist deutlich weniger elegant, ich kann es nur hinzugefügt, Ihnen zu zeigen, wie die logische verwenden OR. Ich würde empfehlen, logische Argumente in Klammern zu setzen.

+0

Persönlich glaube ich, dass der zweite Weg mit all den überflüssigen Klammern nur weniger elegant wird, aber trotzdem aufgewertet wird. – Bathsheba

+0

Danke an euch beide! @Bathsheba hat mir sehr geholfen zu verstehen, wo es schief gelaufen ist, während du eine andere Lösung angeboten hast! Danke noch einmal! – Susu