2016-12-07 3 views
0

Ich habe eine Spalte in meiner Datenmenge, die unter dem Faktor wären ähnlich:ändern Ebene Faktor Zahlen mit unterschiedlicher Reihenfolge in R

response = c("Met Expectations", "Exceeded Expectations", "Exceeded Expectations", "Unacceptable", NA, "Did not meet Expectations") 
factor(response, levels = c("Exceeded Expectations", "Met Expectations", "Did not meet Expectations", "Unacceptable")) 

Dies ist, was ich für die Ebene erhalten. Ich habe das so bestellt, wie ich es im Datensatz habe.

[1] Met Expectations   Exceeded Expectations  Exceeded Expectations  Unacceptable    
[5] <NA>      Did not meet Expectations 
Levels: Exceeded Expectations Met Expectations Did not meet Expectations Unacceptable 

Ich möchte diese Ebenen in Zahlen konvertieren. Also habe ich versucht, dies:

as.numeric(factor(response, levels = c("Exceeded Expectations", "Met Expectations", "Did not meet Expectations", "Unacceptable"))) 

Und ich bekomme die richtige Ausgabe:

[1] 2 1 1 4 NA 3 

Jedoch habe ich die Reihenfolge wollen 4 3 2 1 anstelle von 1 2 3 4. Ich erwarte:

Exceeding Expectation to be 4 
Met Expectations to be 3 
Did not meet Expectations to be 2 
Unacceptable to be 1 
[1] 3 4 4 1 NA 2 

Wie kann ich die Reihenfolge ändern? Gibt es eine direkte Möglichkeit, es zu tun, sonst kann ich die Zahlen nach dem Konvertieren in Zahlen ändern. In diesem Beispiel kann ich die Reihenfolge der Parameterebenen ändern und bekommen, was ich will, aber da meine Daten-Set gibt mir die Ebene in dieser bestimmten Reihenfolge:

Etagen: Erwartungen übertroffen Erwartungen erfüllt erfüllen die Erwartungen nicht Unzulässige

Ich habe versucht, einen einfachen Weg zu finden.

Antwort

1

Wenn Sie den Faktor erstellen, wechseln Sie zu levels = rev(c("Exceeded Expectations", "Met Expectations", "Did not meet Expectations", "Unacceptable")). rev kehrt die Reihenfolge der Ebenen um, wodurch die Reihenfolge der den Kategorienbeschriftungen zugewiesenen numerischen Werte umgekehrt wird.

response = c("Met Expectations", "Exceeded Expectations", "Exceeded Expectations", "Unacceptable", NA, "Did not meet Expectations") 

response = factor(response, levels = c("Exceeded Expectations", "Met Expectations", "Did not meet Expectations", "Unacceptable")) 

as.numeric(response) 

#[1] 2 1 1 4 NA 3 

response = factor(response, levels = rev(c("Exceeded Expectations", "Met Expectations", "Did not meet Expectations", "Unacceptable"))) 

as.numeric(response) 

#[1] 3 4 4 1 NA 2 

Wenn Sie die Reihenfolge der Ebenen in Ihrem Faktorvariablen nicht ändern möchten, können Sie wie folgt vorgehen:

response = factor(response, levels = c("Exceeded Expectations", "Met Expectations", "Did not meet Expectations", "Unacceptable")) 

# Convert to numeric with numeric order of factor reversed 
5 - as.numeric(response) 

#[1] 3 4 4 1 NA 2 

Sie können auch die Anzahl der Ebenen dynamisch, falls berechnen die Anzahl der Ebenen kann variieren:

# Convert to numeric with numeric order of factor reversed 
length(unique(na.omit(response))) + 1 - as.numeric(response) 
+0

Sorry, wenn ich nicht klar war. Ich habe gerade den Faktor erstellt, um die Faktorstufen zu duplizieren, die ich aus meinem Datensatz erhalte. Wenn ich das Dataset $ columnName in meinem Dataset ausführe, erhalte ich die Levels als: Levels: Erwartungen übertroffen Erwartungen erfüllt Erwartungen nicht erfüllt Also wenn ich as.numeric (Datensatz $ columnName) verwende, bekomme ich die Standardreihenfolge 1 2 3 4 und Ich möchte das rückgängig machen, so dass ich 4 3 2 1 – krish

+0

bekomme Ich denke ich verstehe immer noch nicht, was Sie versuchen zu tun. Am Ende meiner Antwort können Sie sehen, dass die Zuordnung von Kategorienamen zu Zahlenwert dem entspricht, was Sie in Ihrer Frage aufgelistet haben. – eipi10

+0

OK, ich denke, ich verstehe es jetzt. Lassen Sie mich wissen, ob meine aktualisierte Antwort das ist, was Sie beabsichtigt haben. – eipi10

Verwandte Themen