Πλαίσιο δεδομένων ταξινόμησης R: συνάρτηση order() με παράδειγμα
⚡ Έξυπνη Σύνοψη
Η ταξινόμηση ενός πλαισίου δεδομένων στο R βασίζεται στη συνάρτηση order(), η οποία επιστρέφει θέσεις γραμμών αντί για τιμές. Η μεταφορά αυτών των θέσεων μέσα σε αγκύλες αναδιατάσσει τις γραμμές κατά μία στήλη, κατά πολλές στήλες ή σε φθίνουσα σειρά.
Ταξινόμηση Δεδομένων σε R
Στην ανάλυση δεδομένων μπορείτε είδος τα δεδομένα σας σύμφωνα με μια συγκεκριμένη μεταβλητή στο σύνολο δεδομένων. Στο R, μπορούμε να χρησιμοποιήσουμε τη βοήθεια της συνάρτησης order(). Στο R, μπορούμε εύκολα να ταξινομήσουμε ένα διάνυσμα συνεχούς μεταβλητής ή μεταβλητής παράγοντα. Η τακτοποίηση των δεδομένων μπορεί να είναι από αύξουσα or φθίνων παραγγελία.
Σύνταξη:
sort(x, decreasing = FALSE, na.last = NA)
Διαφωνία:
- x: Ένα διάνυσμα που περιέχει μια συνεχή ή παραγοντική μεταβλητή
- φθίνουσαΕλέγχει την κατεύθυνση της ταξινόμησης. Από προεπιλογή, η φθίνουσα ρύθμιση έχει οριστεί σε FALSE, η οποία δίνει αύξουσα σειρά.
- να.τελευταίοΗ συνάρτηση sort() χρησιμοποιεί την συνάρτηση NA από προεπιλογή, η οποία διαγράφει τις τιμές που λείπουν. Η συνάρτηση order() χρησιμοποιεί την συνάρτηση TRUE, η οποία τις διατηρεί και τις τοποθετεί τελευταίες.
sort() vs order() vs rank() στην R
Η παραπάνω σύνταξη ανήκει στην sort(), ωστόσο κάθε παράδειγμα σε αυτήν τη σελίδα καλεί την order(). Οι δύο συναρτήσεις απαντούν σε διαφορετικές ερωτήσεις και η ανάμειξή τους είναι ο πιο συνηθισμένος λόγος που μια ταξινόμηση φαίνεται να αποτυγχάνει. Η rank() ολοκληρώνει την τριάδα.
| Λειτουργία | Επιστροφές | Χρησιμοποιήστε το όταν | Προεπιλεγμένος χειρισμός NA |
|---|---|---|---|
| είδος() | Οι ίδιες οι αξίες, κατά σειρά | Χρειάζεστε μόνο ένα ταξινομημένο διάνυσμα | na.last = NA, άρα το NA απορρίπτεται |
| παραγγελία() | Οι θέσεις γραμμών που παράγουν την ταξινομημένη σειρά | Πρέπει να αναδιατάξετε ένα ολόκληρο πλαίσιο δεδομένων | na.last = TRUE, άρα το NA μπαίνει τελευταίο |
| τάξη() | Η κατάταξη κάθε στοιχείου στην αρχική του θέση | Χρειάζεστε μια στήλη κατάταξης, όχι έναν αναδιατεταγμένο πίνακα | na.last = TRUE |
Επειδή η συνάρτηση order() επιστρέφει θέσεις, είναι η μόνη από τις τρεις που μπορεί να οδηγήσει το υποσύνολο αγκυλών που χρησιμοποιείται σε όλη αυτήν τη σελίδα. Βασική τεκμηρίωση R για order() παραθέτει κάθε όρισμα, συμπεριλαμβανομένου του ορίσματος μεθόδου που επιλέγει τον αλγόριθμο ταξινόμησης.
Παράδειγμα 1: Ταξινόμηση ενός πλαισίου δεδομένων κατά μία στήλη
Για παράδειγμα, μπορούμε να δημιουργήσουμε ένα πλαίσιο δεδομένων tibble και να ταξινομήσουμε μία ή περισσότερες μεταβλητές. Ένα πλαίσιο δεδομένων tibble είναι μια σύγχρονη εκδοχή του πλαίσιο δεδομένωνΒελτιώνει τη σύνταξη του πλαισίου δεδομένων και αποφεύγει την ενοχλητική μορφοποίηση τύπων δεδομένων, ειδικά τη μετατροπή από χαρακτήρα σε παράγοντα. Είναι επίσης ένας βολικός τρόπος για να δημιουργήσετε ένα πλαίσιο δεδομένων χειροκίνητα, που είναι και ο σκοπός μας εδώ. Για να μάθετε περισσότερα σχετικά με το tibble, ανατρέξτε στο βινιέτα: https://tibble.tidyverse.org/articles/tibble.html
Ο παρακάτω κώδικας δημιουργεί μια λίστα 50 γραμμών με πέντε τυχαίες στήλες και στη συνέχεια ταξινομεί κάθε γραμμή με βάση τις τιμές στο c1. Η εντολή set.seed(1234) διορθώνει την τυχαία κλήρωση, έτσι ώστε οι ίδιοι αριθμοί να εμφανίζονται σε οποιοδήποτε μηχάνημα.
library(dplyr) set.seed(1234) data_frame <- tibble( c1 = rnorm(50, 5, 1.5), c2 = rnorm(50, 5, 1.5), c3 = rnorm(50, 5, 1.5), c4 = rnorm(50, 5, 1.5), c5 = rnorm(50, 5, 1.5) ) # Sort by c1 df <-data_frame[order(data_frame$c1),] head(df)
Παραγωγή:
# A tibble: 6 x 5 ## c1 c2 c3 c4 c5 ## <dbl> <dbl> <dbl> <dbl> <dbl> ## 1 1.481453 3.477557 4.246283 3.686611 6.0511003 ## 2 1.729941 5.824996 4.525823 6.753663 0.1502718 ## 3 2.556360 6.275348 2.524849 6.368483 5.4787404 ## 4 2.827693 4.769902 5.120089 3.743626 4.0103449 ## 5 2.988510 4.395902 2.077631 4.236894 4.6176880 ## 6 3.122021 6.317305 5.413840 3.551145 5.6067027
Το κόμμα πριν από την αγκύλη κλεισίματος έχει σημασία: η συνάρτηση df[order(…), ] αναδιατάσσει τις γραμμές, ενώ η συνάρτηση df[, order(…)] αναδιατάσσει τις στήλες.
Παράδειγμα 2: Ταξινόμηση κατά Πολλαπλές Στήλες
Κάθε επιπλέον όρισμα που περνάει στην order() λειτουργεί ως tie-breaker για το όρισμα που προηγείται αυτού. Εδώ, το πλαίσιο ταξινομείται κατά c3 και οι γραμμές που μοιράζονται την ίδια τιμή c3 ταξινομούνται στη συνέχεια κατά c4.
# Sort by c3 and c4
df <-data_frame[order(data_frame$c3, data_frame$c4),]
head(df)
Παραγωγή:
# A tibble: 6 x 5 ## c1 c2 c3 c4 c5 ## <dbl> <dbl> <dbl> <dbl> <dbl> ## 1 2.988510 4.395902 2.077631 4.236894 4.617688 ## 2 2.556360 6.275348 2.524849 6.368483 5.478740 ## 3 3.464516 3.914627 2.730068 9.565649 6.016123 ## 4 4.233486 3.292088 3.133568 7.517309 4.772395 ## 5 3.935840 2.941547 3.242078 6.464048 3.599745 ## 6 3.835619 4.947859 3.335349 4.378370 7.240240
Παράδειγμα 3: Ταξινόμηση μίας στήλης κατά φθίνουσα και μίας άλλης κατά αύξουσα
Κάθε στήλη μπορεί να έχει τη δική της κατεύθυνση. Η προσθήκη ενός προθέματος μείον σε μια αριθμητική στήλη αντιστρέφει μόνο αυτήν τη στήλη, επομένως η παρακάτω ταξινόμηση εκτελείται φθίνουσα στο c3 και αύξουσα στο c4.
# Sort by c3(descending) and c4(ascending)
df <-data_frame[order(-data_frame$c3, data_frame$c4),]
head(df)
Παραγωγή:
# A tibble: 6 x 5 ## c1 c2 c3 c4 c5 ## <dbl> <dbl> <dbl> <dbl> <dbl> ## 1 4.339178 4.450214 8.087243 4.5010140 8.410225 ## 2 3.959420 8.105406 7.736312 7.1168936 5.431565 ## 3 3.339023 3.298088 7.494285 5.9303153 7.035912 ## 4 3.397036 5.382794 7.092722 0.7163620 5.620098 ## 5 6.653446 4.733315 6.520536 0.9016707 4.513410 ## 6 4.558559 4.712609 6.380086 6.0562703 5.044277
Το κόλπο με το πρόσημο μείον λειτουργεί μόνο σε αριθμητικές στήλες. Για στήλες χαρακτήρων ή παραγόντων χρησιμοποιήστε την συνάρτηση order(xtfrm(df$col), declining = TRUE) ή μεταβείτε στην προσέγγιση dplyr που φαίνεται στη συνέχεια.
Ταξινόμηση ενός Πλαισίου Δεδομένων με dplyr arrange()
Το ιδίωμα με τις αγκύλες γίνεται δύσκολο να διαβαστεί όταν εμπλέκονται αρκετές στήλες και οδηγίες, επειδή το όνομα του πλαισίου επαναλαμβάνεται μέσα σε κάθε όρισμα. dplyr Η συνάρτηση verb arrange() αφαιρεί αυτήν την επανάληψη: οι στήλες ονομάζονται μία φορά και η συνάρτηση desc() σηματοδοτεί αυτές που εκτελούνται προς τα πίσω.
library(dplyr) # The same three sorts written with arrange() data_frame %>% arrange(c1) # Example 1 data_frame %>% arrange(c3, c4) # Example 2 data_frame %>% arrange(desc(c3), c4) # Example 3
Αξίζει να γνωρίζουμε τρεις πρακτικές διαφορές:
- ευανάγνωστοΗ συνάρτηση arrange(desc(c3), c4) δηλώνει την πρόθεση απευθείας, ενώ η συνάρτηση order(-data_frame$c3, data_frame$c4) την κρύβει πίσω από ένα πρόσημο μείον.
- Τύποι στηλώνΗ συνάρτηση : desc() λειτουργεί σε στήλες χαρακτήρων και παραγόντων καθώς και σε αριθμητικές στήλες, επομένως δεν απαιτείται λύση xtfrm().
- Λείπουν τιμέςΗ συνάρτηση arrange() τοποθετεί πάντα την NA τελευταία, ανεξάρτητα από την κατεύθυνση, ενώ η συνάρτηση order() σας επιτρέπει να τις μετακινήσετε με την συνάρτηση na.last.
Η συνάρτηση arrange() επιστρέφει ένα νέο πλαίσιο δεδομένων και αφήνει το αρχικό ανέπαφο, ακριβώς όπως και η έκδοση με αγκύλες, επομένως το αποτέλεσμα πρέπει να αντιστοιχιστεί σε ένα όνομα για να διατηρηθεί. Τα ομαδοποιημένα πλαίσια ταξινομούνται εντός κάθε ομάδας μόνο όταν παρέχεται η συνάρτηση .by_group = TRUE.
Ταξινόμηση χαρακτήρων, παραγόντων και ελλειπουσών τιμών σε R
Οι αριθμητικές στήλες ταξινομούνται προβλέψιμα. Το κείμενο, οι κατηγορίες και τα κενά δεν το κάνουν και για κάθε μία από τις τρεις απαιτείται διαφορετική απόφαση.
Λείπουν τιμές. Οι sort() και order() διαφωνούν ως προς το τι πρέπει να κάνουν με την NA, γι' αυτό και η ίδια στήλη μπορεί να παράγει δύο διαφορετικούς αριθμούς γραμμών:
x <- c(3, NA, 1, 2) sort(x) # missing values dropped sort(x, na.last = TRUE) # missing values pushed to the end order(x) # NA indexed last by default order(x, na.last = FALSE) # NA indexed first
παράγοντες. A παράγοντας Ταξινομεί κατά σειρά επιπέδου, όχι αλφαβητικά. Αυτό ακριβώς θέλετε για ταξινομημένες κατηγορίες όπως χαμηλό, μεσαίο και υψηλό, και ακριβώς αυτό δεν θέλετε αν τα επίπεδα δημιουργήθηκαν με τη σειρά που εμφανίστηκαν οι τιμές:
grades <- factor(c("low", "high", "medium"), levels = c("low", "medium", "high")) sort(grades) # follows the level order sort(as.character(grades)) # plain alphabetical order
Στήλες χαρακτήρων. Το απλό κείμενο ταξινομείται κατά τοπική ρύθμιση, επομένως η χρήση κεφαλαίων και τόνων μπορεί να αλλάξει το αποτέλεσμα μεταξύ των μηχανών. Δύο συνήθειες αποφεύγουν τις εκπλήξεις: ελέγξτε την κλάση (df$col) πριν από την ταξινόμηση και μετατρέψτε τα ψηφία που είναι αποθηκευμένα ως κείμενο με την as.numeric(), έτσι ώστε το "10" να μην εμφανίζεται πριν από το "2".

