1504 Stimmen

Sortieren Sie die Zeilen des Datenrahmens nach mehreren Spalten.

Ich möchte ein Datenrahmen nach mehreren Spalten sortieren. Zum Beispiel würde ich gerne mit dem unten stehenden Datenrahmen nach der Spalte 'z' (absteigend) und dann nach der Spalte 'b' (aufsteigend) sortieren:

dd <- data.frame(b = factor(c("Hi", "Med", "Hi", "Low"), 
      levels = c("Low", "Med", "Hi"), ordered = TRUE),
      x = c("A", "D", "A", "C"), y = c(8, 3, 9, 9),
      z = c(1, 1, 1, 2))
dd
    b x y z
1  Hi A 8 1
2 Med D 3 1
3  Hi A 9 1
4 Low C 9 2

89voto

Christopher DuBois Punkte 40402

Mit dieser (sehr hilfreichen) Funktion von Kevin Wright, die im Tipps-Bereich des R-Wikis veröffentlicht wurde, ist dies einfach zu erreichen.

sort(dd,by = ~ -z + b)
#     b x y z
# 4 Low C 9 2
# 2 Med D 3 1
# 1  Hi A 8 1
# 3  Hi A 9 1

47voto

Khayelihle Punkte 451

Angenommen, Sie haben einen data.frame A und möchten ihn nach der Spalte x absteigend sortieren. Nennen Sie den sortierten data.frame newdata

newdata <- A[order(-A$x),]

Wenn Sie aufsteigende Reihenfolge wünschen, ersetzen Sie "-" durch nichts. Sie könnten etwas ähnliches haben wie

newdata <- A[order(-A$x, A$y, -A$z),]

wo x und z einige Spalten in data.frame A sind. Dies bedeutet, dass der data.frame A nach x absteigend, y aufsteigend und z absteigend sortiert wird.

46voto

George Dontas Punkte 28585

Oder Sie können das Paket doBy verwenden

library(doBy)
dd <- orderBy(~-z+b, data=dd)

45voto

malecki Punkte 516

Wenn SQL für Sie natürlich ist, behandelt das sqldf-Paket ORDER BY wie von Codd beabsichtigt.

8 Stimmen

MJM, danke für das Aufzeigen dieses Pakets. Es ist unglaublich flexibel und da die Hälfte meiner Arbeit bereits durch das Abrufen von SQL-Datenbanken erledigt ist, ist es einfacher als das Erlernen vieler weniger intuitiver Syntaxen von R.

38voto

Ian Fellows Punkte 16938

Alternativ können Sie das Paket Deducer verwenden

library(Deducer)
dd<- sortData(dd,c("z","b"),increasing= c(FALSE,TRUE))

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