2016-11-21 2 views
0

Ich habe einen Datenrahmen mit einer Spalte mit dem Namen Stage. Der Datenrahmen wird aus einer regelmäßig aktualisierten Excel-Datei generiert.Benutzerdefinierte Sortierung ohne Faktor

In dieser Spalte sollten nur einige wenige Werte enthalten sein, z. B. "Planung" oder "Analyse", aber die Benutzer fügen gelegentlich benutzerdefinierte Werte ein, und es ist nicht praktikabel, sie anzuhalten.

Ich möchte den Datenrahmen nach dieser Spalte sortiert, mit einer benutzerdefinierten Sortierreihenfolge, die chronologisch Sinn macht (z. B. für uns, Planung kommt vor der Analyse). Ich wäre in der Lage, dies unter Verwendung von Faktoren zu implementieren (z. B. Reorder rows using custom order), aber wenn ich eine vordefinierte Liste von Faktoren verwende, verliere ich alle unerwarteten Werte, die die Leute in diese Spalte eingeben. Ich freue mich, dass die unerwarteten Werte nicht richtig sortiert sind, aber ich möchte sie nicht vollständig verlieren.

EDIT: Antwort von floo0 ist erstaunlich, aber ich vernachlässigt zu erwähnen, dass ich auf barplotting die Ergebnisse plane, so etwas wie

barplot(table(MESH_assurance_involved()[MESH_assurance_invol‌​ved_sort_order(), 'Stage']), main="Stage became involved") 

(Klammern, da diese glänzende reaktive Objekte sind, sollten nicht machen ein Unterschied).

Die Ergebnisse sind unsortiert, obwohl das Testen in der Konsole zeigt, dass die zugrunde liegenden Daten sortiert sind.

table bricht auch die Sortierung aber mit ggplot und keine Tabelle bekomme ich das identische Ergebnis.

Um einen Barplot anzuzeigen, der die Quellreihenfolge beibehält, scheint etwas wie Ordering bars in barplot() zu erfordern, aber alle Lösungen, die ich gefunden habe, erfordern Faktoren, und das Mischen mit der Lösung hier funktioniert irgendwie nicht für mich.

Antwort

3

Toy Daten-Set:

dat <- data.frame(Stage = c('random1', 'Planning', 'Analysis', 'random2'), id=1:4, 
        stringsAsFactors = FALSE) 

So sieht dat wie folgt:

> dat 
    Stage id 
1 random1 1 
2 Planning 2 
3 Analysis 3 
4 random2 4 

Jetzt können Sie etwas tun können:

known_levels <- c('Planning', 'Analysis') 
my_order <- order(factor(dat$Stage, levels = known_levels, ordered=TRUE)) 
dat[my_order, ] 

Welche Sie

gibt
 Stage id 
2 Planning 2 
3 Analysis 3 
1 random1 1 
4 random2 4 
+0

Vielen Dank. Ich habe meine Daten sortiert, aber wenn ich sie barplot, werden die Daten nicht sortiert angezeigt 'barplot (Tabelle (MESH_assurance_involved() [MESH_assurance_involved_sort_order(), 'Bühne]], main =" Bühne wurde beteiligt ")' (Klammern weil glänzend) . Ich weiß, dass man, um einen sortierten Barplot zu bekommen, ein paar Tricks wie [Bestellen von Bars in barplot()] benötigt (http://stackoverflow.com/questions/19681586/ordering-bars-in-barplot), aber ich verstehe nicht wie Machen Sie sich das zunutze: Ich verstehe, wie Ihr Code funktioniert, aber die Daten und die Sortierreihenfolge der Daten zur gleichen Zeit zu faktorisieren, erscheint mir nicht möglich. – anotherfred

Verwandte Themen