5 Stimmen

Sortieren von Daten in R

Ich habe einen Datenrahmen mit 900.000 Zeilen und 11 Spalten in R. Die Spaltennamen und -typen sind wie folgt:

column name: date / mcode / mname / ycode / yname / yissue  / bsent   / breturn / tsent   / treturn / csales
type:        Date / Char  / Char  / Char  / Char  / Numeric / Numeric / Numeric / Numeric / Numeric / Numeric

Ich möchte die Daten nach diesen Variablen in der folgenden Reihenfolge sortieren:

  1. Datum
  2. mcode
  3. ycode
  4. yissue

Die Reihenfolge der Ebenen ist hier wichtig, d.h. sie sollten zuerst nach Datum sortiert werden, und wenn es identische Daten gibt, sollten sie nach mcode sortiert werden, und so weiter und so fort. Wie kann ich das in R machen?

11voto

jbremnant Punkte 894

Vielleicht so etwas wie dies?

> df<- data.frame(a=rev(1:10), b=rep(c(2,1),5), c=rnorm(10))
> df
    a b           c
1  10 2 -0.85212079
2   9 1 -0.46199463
3   8 2 -1.52374565
4   7 1  0.28904717
5   6 2 -0.91609012
6   5 1  1.60448783
7   4 2  0.51249796
8   3 1 -1.35119089
9   2 2 -0.55497745
10  1 1 -0.05723538
> with(df, df[order(a, b, c), ])
    a b           c
10  1 1 -0.05723538
9   2 2 -0.55497745
8   3 1 -1.35119089
7   4 2  0.51249796
6   5 1  1.60448783
5   6 2 -0.91609012
4   7 1  0.28904717
3   8 2 -1.52374565
2   9 1 -0.46199463
1  10 2 -0.85212079

Die Funktion "Ordnung" kann mehrere Vektoren als Argumente annehmen.

8voto

Ramnath Punkte 52709

Aufbauend auf der früheren Lösung gibt es zwei weitere Ansätze. Der zweite Ansatz erfordert Plyr.

df.sorted = df[do.call(order, df[names(df)]),];
df.sorted = arrange(df, a, b, c)

4voto

JD Long Punkte 57096

Wenn keine der oben genannten Antworten Ihr Feuer entfacht, können Sie jederzeit die orderBy() Funktion aus dem doBy-Paket:

require(doBy)
sortedData <- orderBy(~date+mcode+ycode+yissue , data=unsortedData)

Wie Sie vielleicht intuitiv erwarten, können Sie jeder Variablen ein negatives Vorzeichen voranstellen, um sie absteigend zu sortieren.

Es gibt nichts Magisches an orderBy(). In der Dokumentation heißt es, dass es sich um einen "Wrapper für die order()-Funktion handelt - mit dem wichtigen Unterschied, dass die Variablen, nach denen geordnet werden soll, durch eine Modellformel angegeben werden können."

Ich finde die Syntax leichter zu merken.

1voto

Tomsim Punkte 11

Zusätzliche Hinweise: Verwenden Sie -c(), um Faktor- oder Zeichenspalten umgekehrt zu sortieren.

with(df, df[order(a, b, -c(myCharCol)), ])

Sie können auch einen Vektor hinzufügen, um nur bestimmte Spalten auszuwählen

with(df, df[order(a, b, c), c('a','b','x','y')])

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X