2017-03-14 2 views
0

FrageGibt es einen einfachen einzeiligen Befehl, um eine sortierte Häufigkeitstabelle einer kategorialen Variablen in R zu erhalten?

Es wurde ein paar Mal schon gefragt, wie eine sortierte Frequenztabelle einer kategorialen Variablen in R zu erzeugen (siehe zum Beispiel this question, die ein Duplikat a generic data frame sorting question markiert ist). Die Antworten schlagen drei aufeinanderfolgende Operationen vor: 1. Erzeugen einer Häufigkeitstabelle, 2. Transformieren in einen Datenrahmen, 3. Sortieren (siehe Beispiel unten).

Dies ist relativ kompliziert für solch eine einfache Operation. Außerdem gibt summary() des Datenrahmens Ihnen (für die fragliche Spalte) die ersten 5 Zeilen genau der sortierten Häufigkeitstabelle, nach der ich suche (sofern die Anzahl der verschiedenen Werte in dieser Spalte größer als 5 ist).

Beispiel

einen Datenrahmen des Formulars Betrachten

example_df <- data.frame("Avg" = c(2558,2532,2503,2498,2491,2491,2477,2467,2460,2458,2445,2422), "Name" = c("Jun","Wang","Xi","Wang","Wang","Ma","Li","Ma","Xi","Lin","Yang","Zhao")) 

aber viel länger, mit mehreren tausend Zeilen und mehrere tausend verschiedene Werte für „Name“.

Was ist der einfachste Weg, eine Häufigkeitstabelle von Namen mit den häufigsten Namen zuerst zu extrahieren? Dies wäre nützlich, da eine große Tabelle mit meist nur einmal vorkommenden Namen nicht sehr informativ wäre.

Sie können

example_ft<-as.data.frame(table(example_df$Name)) 
example_ft<-example_ft[order(-example_ft$Freq),] 

oder

library(plyr) 
example_ft<-as.data.frame(table(example_df$Name)) 
example_ft<-arrange(example_ft,desc(Freq),Var1) 

Dies tun die oben verlinkten in den vorherigen Fragen vorgeschlagenen Lösungen. Beides führt in der folgenden example_ft wie beabsichtigt (obwohl die Zeilennummern unterscheiden)

Var1 Freq 
5 Wang 3 
4 Ma 2 
6 Xi 2 
1 Jun 1 
2 Li 1 
3 Lin 1 
7 Yang 1 
8 Zhao 1 

aber beide Optionen scheinen ziemlich kompliziert. Meine Vermutung ist, dass es wahrscheinlich einen einfacheren und geradlinigeren Weg gibt. Und in der Tat gibt es einen sehr einfachen Befehl, um die gewünschte Ausgabe geben (aber nur die ersten 5 Zeilen und nur unter anderem unabhängigem Ausgang), summary():

summary(example_df) 

Ausgang:

 Avg   Name 
Min. :2422 Wang :3 
1st Qu.:2460 Ma  :2 
Median :2484 Xi  :2 
Mean :2484 Jun :1 
3rd Qu.:2499 Li  :1 
Max. :2558 Lin :1 
       (Other):2 
+1

Nur FYI, können Sie ';' verwenden, um alles auf eine Zeile zu setzen. d.h. 'x <-5; x '. – CCurtis

Antwort

1

Wie sei es damit ? :

sort(table(example_df$Name),decreasing = TRUE) 
Verwandte Themen