R Sorteeri andmeraam: order() funktsioon näitega
⚡ Nutikas kokkuvõte
Andmeraami sortimine R-is tugineb funktsioonile order(), mis tagastab reapositsioonid, mitte väärtused. Nende positsioonide edastamine nurksulgudes järjestab ridu ühe veeru, mitme veeru või kahanevas järjekorras.

Andmete sortimine R-is
Andmeanalüüsis saate sort teie andmed vastavalt andmestiku teatud muutujale. R-is saame kasutada funktsiooni order() abi. R-is saame hõlpsasti sortida pideva muutuja või faktorimuutuja vektorit. Andmete korrastamine võib olla kasvavalt or kahanevalt järjekorras.
süntaksit:
sort(x, decreasing = FALSE, na.last = NA)
Argument:
- xVektor, mis sisaldab pidevat või tegurmuutujat
- vähenev: Juhib sortimise suunda. Vaikimisi on kahanev järjekord seatud väärtusele FALSE, mis annab kasvava järjekorra.
- na.viimane: Näitab, kas puuduvad väärtused (NA) tuleks panna viimaseks või mitte. sort() kasutab vaikimisi NA-d, mis eemaldab puuduvad väärtused; order() kasutab TRUE-d, mis hoiab need alles ja asetab viimaseks.
sort() vs order() vs rank() R-is
Ülaltoodud süntaks kuulub funktsiooni sort() funktsioonile, kuid iga selle lehe näide kutsub esile funktsiooni order(). Need kaks funktsiooni vastavad erinevatele küsimustele ja nende segamini ajamine on kõige levinum põhjus, miks sortimine ebaõnnestub. rank() täiendab kolmikut.
| funktsioon | Tagastamine | Kasutage seda siis, kui | Vaikimisi NA-käsitlus |
|---|---|---|---|
| sort () | Väärtused ise, järjekorras | Teil on vaja ainult sorteeritud vektorit | na.last = NA, seega NA jäetakse välja |
| telli() | Rea positsioonid, mis loovad sorteeritud järjestuse | Peate terve andmeraami ümber järjestama | na.last = TRUE, seega NA läheb viimaseks |
| auaste() | Iga elemendi järjestus oma algsel positsioonil | Teil on vaja edetabeli veergu, mitte ümberjärjestatud tabelit | na.last = TRUE |
Kuna order() tagastab positsioonid, on see kolmest ainus, mis saab juhtida sellel lehel kasutatavat nurksulgudes alamhulka. R-i baasdokumentatsioon order() jaoks loetleb kõik argumendid, sealhulgas meetodi argumendi, mis valib sortimisalgoritmi.
Näide 1: Andmeraami sortimine ühe veeru järgi
Näiteks saame luua tibble'i andmeraami ja sortida ühe või mitu muutujat. Tibble'i andmeraam on moodne lähenemine andmeraamSee parandab andmeraami süntaksit ja väldib tüütut andmetüübi vormindamist, eriti märgi teisendamist teguriks. See on ka mugav viis andmeraami käsitsi loomiseks, mis ongi meie eesmärk. Lisateavet tibble'i kohta leiate järgmisest vinjetist: https://tibble.tidyverse.org/articles/tibble.html
Allolev kood loob 50-realise viiest juhuslikust veerust koosneva tabeli ja sorteerib seejärel iga rea c1 väärtuste järgi. set.seed(1234) parandab juhusliku arvu, nii et samad numbrid ilmuvad igas masinas.
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)
Väljund:
# 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
Sulgude ees olev koma on oluline: df[order(…), ] järjestab ridu ümber, samas kui df[, order(…)] järjestaks hoopis veerge ümber.
Näide 2: Sorteeri mitme veeru järgi
Iga order() funktsioonile antud lisaargument toimib eelmise argumendi viigimurdjana. Siin sorteeritakse raam c3 järgi ja sama c3 väärtusega read järjestatakse seejärel c4 järgi.
# Sort by c3 and c4
df <-data_frame[order(data_frame$c3, data_frame$c4),]
head(df)
Väljund:
# 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
Näide 3: Sorteeri üks veerg kahanevalt ja teine kasvavalt
Igal veerul võib olla oma suund. Numbrilise veeru ette miinusmärgi lisamine pöörab ainult selle veeru suuna ümber, seega toimub sortimine c3 korral kahanevalt ja c4 korral kasvavalt.
# Sort by c3(descending) and c4(ascending)
df <-data_frame[order(-data_frame$c3, data_frame$c4),]
head(df)
Väljund:
# 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
Miinusmärgi trikk töötab ainult numbriliste veergude puhul. Tähe- või tegurveergude puhul kasutage order(xtfrm(df$col), decreasing = TRUE) või lülituge järgmisena näidatud dplyr meetodile.
Andmeraami sorteerimine dplyr arrange() abil
Nurksulgudes olev idioom muutub raskesti loetavaks, kui kaasatud on mitu veergu ja suunda, kuna raami nimi kordub iga argumendi sees. dplyr Verb arrange() eemaldab selle korduse: veerud nimetatakse üks kord ja desc() märgib neid, mis asuvad tagurpidi.
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
Tasub teada kolme praktilist erinevust:
- loetavus: arrange(desc(c3), c4) määrab kavatsuse otse, samas kui order(-data_frame$c3, data_frame$c4) peidab selle miinusmärgi taha.
- Veergude tüübid: desc() töötab nii tähemärkide ja tegurite veergudel kui ka numbrilistes veergudes, seega pole xtfrm() ajutist lahendust vaja.
- Puuduvad väärtused: arrange() asetab NA alati viimaseks, olenemata suunast, samas kui order() võimaldab neid na.last abil liigutada.
arrange() tagastab uue andmeraami ja jätab algse puutumata, täpselt nagu nurksulgudes versiooni puhul, seega tuleb tulemusele säilitamiseks ikkagi nimi omistada. Rühmitatud raamid sorteeritakse igas rühmas ainult siis, kui on antud .by_group = TRUE.
Märkide, tegurite ja puuduvate väärtuste sortimine R-is
Numbrilised veerud sorteeruvad etteaimatavalt. Tekst, kategooriad ja lüngad mitte ning igaüks neist kolmest vajab erinevat otsust.
Puuduvad väärtused. sort() ja order() on eriarvamusel selle osas, mida NA-ga peale hakata, mistõttu sama veerg võib anda kaks erinevat ridade arvu:
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
tegurid. A faktor sorteerib tasemete järjekorra, mitte tähestikulise järjekorra järgi. See on täpselt see, mida soovite järjestatud kategooriate (nt madal, keskmine ja kõrge) puhul, ja täpselt see, mida te ei soovi, kui tasemed loodi väärtuste ilmumise järjekorras:
grades <- factor(c("low", "high", "medium"), levels = c("low", "medium", "high")) sort(grades) # follows the level order sort(as.character(grades)) # plain alphabetical order
Märkide veerud. Lihttekst sorteerib lokaadi järgi, seega võivad suurtähed ja rõhumärgid tulemust masinate vahel muuta. Kaks harjumust aitavad üllatusi vältida: kontrollige enne sortimist klassi class(df$col) ja teisendage tekstina salvestatud numbrid funktsiooniga as.numeric() nii, et „10“ ei satuks „2“ ette.
