2016-06-21 3 views
-1

Ich versuche, bestimmte Temperaturbereiche entweder mit "kalt", "med" oder "heiß" zu ersetzen, und ich weiß nicht, wie ich mein Problem beheben kann. Der Dataset heißt "stats" und die Temperatur ist "temp1".Ersetzen Sie Vektorwerte mit Namen

tmp1<-stats$temp1 
lesser<-stats[stats$temp1<=11,] 
inbetween<-stats[stats$temp1>11 & stats$temp1<22,] 
greater<-stats[stats$temp1>=22,] 
stats$temp2<-replace(tmp1, c("lesser", "inbetween", "greater"), c("cold","med","hot")) 

Der Fehler Ich erhalte ist:

Fehler in `$ < -.data.frame Ersatz 1095 Zeilen hat, Daten hat 1092

ich mehrere NAs tun haben, aber mehr als 1095-1092 = 3 Werte

+2

Willkommen bei Stack Overflow! Bitte lesen Sie die Informationen über [wie man eine gute Frage stellt] (http://stackoverflow.com/help/how-to-ask) und wie man ein [reproduzierbares Beispiel gibt] (http://stackoverflow.com/questions/ 5963269). Dies wird es anderen sehr erleichtern, Ihnen zu helfen. – zx8754

+0

'stats' ist der Name eines Pakets, also würde ich das nicht als Variablennamen verwenden. – N8TRO

+0

Aber wenn Sie darauf bestehen: 'stats $ temp2 <- ifelse (stats $ temp1 <= 11," kalt ", ifelse (stats $ temp1> = 22," hot "," med "))' – N8TRO

Antwort

2

@ zx8754 und @ N8TRO bieten schöne Lösungen (vor allem). Hier ist eine weitere, mit einem reproduzierbaren Beispiel.

set.seed(357) 
xy <- data.frame(temp = sample(0:50, size = 30, replace = TRUE)) 

xy[xy$temp <= 10, "feel"] <- "cold" 

xy[xy$temp > 10 & xy$temp < 30, "feel"] <- "ok" 

xy[xy$temp >= 30, "feel"] <- "hothothot" 

> head(xy) 
    temp  feel 
1 5  cold 
2 2  cold 
3 14  ok 
4 11  ok 
5 33 hothothot 
6 23  ok 
+1

Alternativ könnten Sie 'feel' mit" ok "initialisieren und dann zwei Unterzuweisungen für' cold' und 'hothothot' machen. –

+0

@docendodiscimus true, aber ich wollte es auf diese Weise machen, um irgendwelche NAs für die Plausibilitätsprüfung zu haben Falls ein Wert nicht berücksichtigt wird. –

+0

Ich sehe was du meinst, es ist ein gültiger Punkt –

2

Wir cut() verwenden und fügen Sie Etiketten wie folgt:

stats$temp2 <- cut(stats$temp1, c(0, 11, 22, Inf), labels = c("cold", "med", "hot")) 

Hinweis, dass diese resultierende Spalte factor ist, wenn Sie es brauchen eine character zu sein, dann müssen wir es einzuwickeln in as.character().