2017-11-22 1 views
-4

Ich erstelle eine neue Spalte (namens Umgebung) in meinem Dataset (genannt daten2) basierend auf einer anderen Spalte namens "Site" wo "1", "2" und "4" Stream entsprechen die Orte "3" und "5" entsprechen Sumpfgebieten und "8" entspricht der Flussstelle. Hier ist mein Code:iffelse statement error in r

data2$Environment<-as.factor(data2$Environment<-ifelse(data2$Site==c("1", "2", "4"), "Stream", ifelse(data2$Site==c("8"),"River" ,"Swamp"))) 

Wenn durch die neue Umgebung Spalte gehen, es führt den falschen Namen an der falschen Stelle. Zum Beispiel, statt 8 entspricht River, manchmal entspricht es Stream. Dies geschieht für andere Faktoren auch für die verschiedenen Kombinationen. Warum passiert das? Jede Hilfe wird sehr geschätzt.

+2

Bitte teilen Sie ein reproduzierbares Beispiel. Wir haben keine Daten2, daher können wir Ihr Problem nicht reproduzieren. – josliber

Antwort

0

Wie können Sie überprüfen, dass data2 $ Site einen der c ("1", "2", "4") Werte annimmt?

Definitiv nicht von data2$Site == c("1", "2", "4"), sollten Sie% in% verwenden:

data2$Site %in% c("1", "2", "4") 

Lasst uns zusammen arbeiten auf einem reproduzierbaren Beispiel:

data(iris) 

Diese bekannte Datensatz hat eine Spalte Spezies genannt, die nimmt 3 Werte: virginica, setosa und versicolor. Dies ist die vollständige Spalte:

> iris$Species 
    [1] setosa  setosa  setosa  setosa  setosa  setosa  setosa  setosa  setosa  
[10] setosa  setosa  setosa  setosa  setosa  setosa  setosa  setosa  setosa  
[19] setosa  setosa  setosa  setosa  setosa  setosa  setosa  setosa  setosa  
[28] setosa  setosa  setosa  setosa  setosa  setosa  setosa  setosa  setosa  
[37] setosa  setosa  setosa  setosa  setosa  setosa  setosa  setosa  setosa  
[46] setosa  setosa  setosa  setosa  setosa  versicolor versicolor versicolor versicolor 
[55] versicolor versicolor versicolor versicolor versicolor versicolor versicolor versicolor versicolor 
[64] versicolor versicolor versicolor versicolor versicolor versicolor versicolor versicolor versicolor 
[73] versicolor versicolor versicolor versicolor versicolor versicolor versicolor versicolor versicolor 
[82] versicolor versicolor versicolor versicolor versicolor versicolor versicolor versicolor versicolor 
[91] versicolor versicolor versicolor versicolor versicolor versicolor versicolor versicolor versicolor 
[100] versicolor virginica virginica virginica virginica virginica virginica virginica virginica 
[109] virginica virginica virginica virginica virginica virginica virginica virginica virginica 
[118] virginica virginica virginica virginica virginica virginica virginica virginica virginica 
[127] virginica virginica virginica virginica virginica virginica virginica virginica virginica 
[136] virginica virginica virginica virginica virginica virginica virginica virginica virginica 
[145] virginica virginica virginica virginica virginica virginica 

Wenn ich überprüfen, ob meine Spezies ist entweder setosa oder virginica, die ersten 50 sollte JA zurückkehren, die zweite 50 NEIN, und die letzten 50 erneut YES. Mal sehen, was passiert, wenn wir die falsche Art und Weise überprüfen:

> iris$Species == c('virginica','setosa') 
    [1] FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE 
[18] TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE 
[35] FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE 
[52] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 
[69] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 
[86] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE 
[103] TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE 
[120] FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE 
[137] TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE 

Die ersten und letzten 50 Datensätze zurückgegeben werden als TRUE-FALSE abwechselnd. Lassen Sie uns den richtigen Weg gehen:

> iris$Species %in% c('virginica','setosa') 
    [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE 
[18] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE 
[35] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE 
[52] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 
[69] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 
[86] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE 
[103] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE 
[120] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE 
[137] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE 

Das ist also Artikel Nummer eins. Artikelnummer zwei ist, tun Sie so etwas wie:

data2$Environment<-as.factor(data2$Environment<-ifelse(blabla)) 

Dies sogar gefährlich sein könnte, aber kein Kommentar über das, ich habe noch nie eine verschachtelte Zuordnung wie dies getan. Mein Kommentar ist: Warum nicht einfach ? Ansonsten ist Ihr verschachteltes ifelse, um 3 Bedingungen zu kümmern, korrekt. Nur zum Vergleich, in meinem Beispiel wäre die äquivalent sein:

> ifelse(iris$Species %in% c('virginica'),'vi', ifelse(iris$Species %in% c('setosa'),'se', 've')) 
    [1] "se" "se" "se" "se" "se" "se" "se" "se" "se" "se" "se" "se" "se" "se" "se" "se" "se" "se" "se" "se" 
[21] "se" "se" "se" "se" "se" "se" "se" "se" "se" "se" "se" "se" "se" "se" "se" "se" "se" "se" "se" "se" 
[41] "se" "se" "se" "se" "se" "se" "se" "se" "se" "se" "ve" "ve" "ve" "ve" "ve" "ve" "ve" "ve" "ve" "ve" 
[61] "ve" "ve" "ve" "ve" "ve" "ve" "ve" "ve" "ve" "ve" "ve" "ve" "ve" "ve" "ve" "ve" "ve" "ve" "ve" "ve" 
[81] "ve" "ve" "ve" "ve" "ve" "ve" "ve" "ve" "ve" "ve" "ve" "ve" "ve" "ve" "ve" "ve" "ve" "ve" "ve" "ve" 
[101] "vi" "vi" "vi" "vi" "vi" "vi" "vi" "vi" "vi" "vi" "vi" "vi" "vi" "vi" "vi" "vi" "vi" "vi" "vi" "vi" 
[121] "vi" "vi" "vi" "vi" "vi" "vi" "vi" "vi" "vi" "vi" "vi" "vi" "vi" "vi" "vi" "vi" "vi" "vi" "vi" "vi" 
[141] "vi" "vi" "vi" "vi" "vi" "vi" "vi" "vi" "vi" "vi" 

Daher, wenn Sie nur Ihre Doppel Gleiches% in% 's ändern, sollten Sie gut sein.