Wie sortiert man einen Datenrahmen nach mehreren Spalten?

Ich möchte einen data.frame nach mehreren Spalten sortieren. Zum Beispiel möchte ich den folgenden Datenrahmen nach Spalte "z" (absteigend) und dann nach 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
Lösung

Sie können die Funktion Ordnung() direkt verwenden, ohne auf Zusatztools zurückgreifen zu müssen - siehe diese einfachere Antwort, die einen Trick direkt am Anfang des Codes von "Beispiel(Ordnung)" verwendet:

R> dd[with(dd, order(-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

Edit some 2+ years later: Es wurde gerade gefragt, wie man das nach Spaltenindex macht. Die Antwort ist, einfach die gewünschte(n) Sortierspalte(n) an die Funktion order() zu übergeben:

R> dd[order(-dd[,4], dd[,1]), ]
    b x y z
4 Low C 9 2
2 Med D 3 1
1  Hi A 8 1
3  Hi A 9 1
R> 

anstatt den Namen der Spalte zu verwenden (und with() für einen einfacheren/direkteren Zugriff).

Kommentare (10)

Mit dieser (sehr hilfreichen) Funktion von Kevin Wright, die im Tipps-Bereich des R-Wikis zu finden ist, lässt sich dies leicht 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
Kommentare (1)

Alternativ können Sie auch das Paket Deducer verwenden


library(Deducer)
dd
Kommentare (0)