Θέλω να ταξινομήσω ένα data.frame με βάση πολλαπλές στήλες. Για παράδειγμα, με το παρακάτω πλαίσιο data.frame θα ήθελα να ταξινομήσω με βάση τη στήλη "z" (φθίνουσα) και στη συνέχεια με βάση τη στήλη "b" (αύξουσα):
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
Μπορείτε να χρησιμοποιήσετε τη συνάρτηση order()
απευθείας χωρίς να καταφύγετε σε πρόσθετα εργαλεία -- δείτε αυτή την απλούστερη απάντηση που χρησιμοποιεί ένα τέχνασμα ακριβώς από την κορυφή του κώδικα example(order)
:
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
Επεξεργασία περίπου 2+ χρόνια αργότερα: Μόλις ρωτήθηκε πώς να το κάνετε αυτό με βάση τον δείκτη στήλης. Η απάντηση είναι απλά να περάσετε την επιθυμητή(ες) στήλη(ες) ταξινόμησης στη συνάρτηση order()
:
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>
αντί να χρησιμοποιείτε το όνομα της στήλης (και την with()
για ευκολότερη/πιο άμεση πρόσβαση).
Με αυτή την (πολύ χρήσιμη) συνάρτηση του Kevin Wright, που δημοσιεύτηκε στην ενότητα συμβουλές του R wiki, αυτό επιτυγχάνεται εύκολα.
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
Εναλλακτικά, χρησιμοποιώντας το πακέτο Deducer
library(Deducer)
dd<- sortData(dd,c("z","b"),increasing= c(FALSE,TRUE))