R Sort Data Frame: order() Funktion med eksempel
โก Smart opsummering
Sortering af en dataramme i R er afhรฆngig af funktionen order(), som returnerer rรฆkkepositioner i stedet for vรฆrdier. Ved at placere disse positioner i firkantede parenteser omarrangeres rรฆkkerne med รฉn kolonne, med flere kolonner eller i faldende rรฆkkefรธlge.

Sortering af data i R
I dataanalyse kan du sort dine data i henhold til en bestemt variabel i datasรฆttet. I R kan vi bruge hjรฆlpen fra funktionen order(). I R kan vi nemt sortere en vektor af kontinuert variabel eller faktorvariabel. Ordning af data kan vรฆre af opstigende or aftagende rรฆkkefรธlge.
Syntaks:
sort(x, decreasing = FALSE, na.last = NA)
Argument:
- xEn vektor, der indeholder en kontinuert variabel eller en faktorvariabel
- faldendeStyrer sorteringsretningen. Som standard er faldende indstillet til FALSK, hvilket giver stigende rรฆkkefรธlge.
- na.sidsteAngiver, om NA-vรฆrdier skal placeres sidst eller ej. sort() bruger NA som standard, hvilket fjerner manglende vรฆrdier; order() bruger TRUE, hvilket beholder dem og placerer dem sidst.
sort() vs. order() vs. rank() i R
Syntaksen ovenfor tilhรธrer sort(), men hvert eksempel pรฅ denne side kalder order(). De to funktioner besvarer forskellige spรธrgsmรฅl, og at blande dem sammen er den mest almindelige รฅrsag til, at en sortering tilsyneladende mislykkes. rank() fuldender trioen.
| Funktion | Returpolitik | Brug det nรฅr | Standard NA-hรฅndtering |
|---|---|---|---|
| sortere() | Vรฆrdierne i sig selv, i rรฆkkefรธlge | Du behรธver kun en sorteret vektor | na.last = NA, sรฅ NA er droppet |
| bestille() | De rรฆkkepositioner, der producerer den sorterede rรฆkkefรธlge | Du skal omarrangere en hel dataramme | na.last = TRUE, sรฅ NA kommer sidst |
| rang() | Rangen af โโhvert element i dets oprindelige position | Du har brug for en rangkolonne, ikke en omordnet tabel | na.last = TRUE |
Fordi order() returnerer positioner, er det den eneste af de tre, der kan styre den delmรฆngde af firkantede parenteser, der bruges pรฅ hele denne side. R-basisdokumentation for order() viser alle argumenter, inklusive metodeargumentet, der vรฆlger sorteringsalgoritmen.
Eksempel 1: Sortรฉr en dataramme efter รฉn kolonne
For eksempel kan vi oprette en tibble-dataramme og sortere en eller flere variabler. En tibble-dataramme er en moderne fortolkning af datarammeDet forbedrer datarammens syntaks og undgรฅr frustrerende formatering af datatyper, isรฆr konvertering fra tegn til faktor. Det er ogsรฅ en bekvem mรฅde at oprette en dataramme manuelt, hvilket er vores formรฅl her. For at lรฆre mere om tibble, se vignetten: https://tibble.tidyverse.org/articles/tibble.html
Koden nedenfor bygger en tibble med 50 rรฆkker bestรฅende af fem tilfรฆldige kolonner og sorterer derefter hver rรฆkke efter vรฆrdierne i c1. set.seed(1234) retter den tilfรฆldige trรฆkning, sรฅ de samme tal vises pรฅ enhver maskine.
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)
Output:
# 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
Kommaet fรธr den afsluttende parentes har betydning: df[order(โฆ), ] omarrangerer rรฆkker, mens df[, order(โฆ)] i stedet omarrangerer kolonner.
Eksempel 2: Sortรฉr efter flere kolonner
Hvert ekstra argument, der sendes til order(), fungerer som en tie-breaker for argumentet fรธr det. Her sorteres rammen efter c3, og rรฆkker, der deler den samme c3-vรฆrdi, sorteres derefter efter c4.
# Sort by c3 and c4
df <-data_frame[order(data_frame$c3, data_frame$c4),]
head(df)
Output:
# 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
Eksempel 3: Sortรฉr รฉn kolonne faldende og en anden stigende
Hver kolonne kan have sin egen retning. Hvis der sรฆttes et minustegn foran en numerisk kolonne, vendes kun den pรฅgรฆldende kolonne om, sรฅ sorteringen nedenfor kรธrer faldende pรฅ c3 og stigende pรฅ c4.
# Sort by c3(descending) and c4(ascending)
df <-data_frame[order(-data_frame$c3, data_frame$c4),]
head(df)
Output:
# 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
Minustegn-tricket virker kun pรฅ numeriske kolonner. For tegn- eller faktorkolonner skal du bruge order(xtfrm(df$col), decreasing = TRUE), eller skifte til dplyr-tilgangen vist nedenfor.
Sortรฉr en dataramme med dplyr arrange()
Idiomet med firkantede parenteser bliver svรฆrt at lรฆse, nรฅr der er involveret flere kolonner og retninger, fordi rammenavnet gentages i hvert argument. dplyr Verbet arrange() fjerner den gentagelse: kolonner navngives รฉn gang, og desc() markerer dem, der kรธrer baglรฆns.
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
Tre praktiske forskelle er vรฆrd at kende:
- Lรฆsbarhedarrange(desc(c3), c4) angiver intentionen direkte, mens order(-data_frame$c3, data_frame$c4) skjuler den bag et minustegn.
- Kolonnetyperdesc() fungerer pรฅ tegn- og faktorkolonner sรฅvel som numeriske, sรฅ der er ikke behov for en lรธsning til xtfrm().
- Manglende vรฆrdierarrange() placerer altid NA sidst, uanset retningen, hvorimod order() lader dig flytte dem med na.last.
arrange() returnerer en ny dataramme og lader originalen vรฆre uรฆndret, prรฆcis som versionen med firkantede parenteser, sรฅ resultatet skal stadig tildeles et navn for at blive beholdt. Grupperede rammer sorteres kun inden for hver gruppe, nรฅr .by_group = TRUE angives.
Sortering af tegn, faktorer og manglende vรฆrdier i R
Numeriske kolonner sorteres forudsigeligt. Tekst, kategorier og huller gรธr det ikke, og hver af de tre krรฆver en forskellig beslutning.
Manglende vรฆrdier. sort() og order() er uenige om, hvad de skal gรธre med NA, hvilket er grunden til, at den samme kolonne kan producere to forskellige rรฆkkeantal:
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
faktorer. A faktor sorterer efter niveauorden, ikke alfabetisk. Det er prรฆcis, hvad du รธnsker for ordnede kategorier som lav, mellem og hรธj, og prรฆcis, hvad du ikke รธnsker, hvis niveauerne blev oprettet i den rรฆkkefรธlge, vรฆrdierne tilfรฆldigvis optrรฅdte:
grades <- factor(c("low", "high", "medium"), levels = c("low", "medium", "high")) sort(grades) # follows the level order sort(as.character(grades)) # plain alphabetical order
Tegnkolonner. Almindelig tekst sorterer efter lokalitet, sรฅ brug af store bogstaver og accenter kan รฆndre resultatet mellem maskiner. Der er to vaner, der undgรฅr overraskelser: tjek class(df$col) fรธr sortering, og konverter cifre gemt som tekst med as.numeric(), sรฅ "10" ikke lander foran "2".
