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.

  • 🔢 telli() põhitõed: order() tagastab rea indeksid, mis paigutavad veeru kasvavasse järjestusse, mitte sorteeritud väärtusi endid.
  • 📌 Üksik veerg: df[order(df$c1), ] järjestab kaadri iga rea ​​ümber c1-s hoitavate väärtuste võrra.
  • 🧮 Mitu veergu: Lisaargumendid toimivad viigimurdjatena, seega order(df$c3, df$c4) sorteerib c3 ja seejärel c4 järgi.
  • 🔻 Kahanev järjekord: Lisage numbrilise veeru ette miinusmärk või edastage sort() funktsioonile vähenev väärtus = TRUE.
  • 🧩 tidyverse'i marsruut: arrange() ja desc() väljendavad täpselt samu sorteerimisi kui loetavad dplyr-verbid.
  • ⚠️ Puuduvad väärtused: order() asetab NA vaikimisi viimaseks, samas kui sort() eemaldab puuduvad väärtused, kui na.last pole määratud.

R Sorteeri andmeraam kasutades Order()

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.

KKK

Kasuta df[order(rownames(df)), ]. Reanimed on tähemärgid, seega sortimine järgib teksti järjestamist ja „10” maandub enne „2”. Murra need numbriliste nimede korral as.numeric() funktsiooni. Tibble jätab reanimed täielikult välja, seega lisa hoopis selgesõnaline ID-veerg.

Edasta meetod = „radix“ funktsioonile order(), mis on kiireim valik täisarvude ja lühikeste stringide jaoks. Miljonite ridade puhul sorteerib data.table::setorder() kohapeal ilma tabelit kopeerimata ja dplyr verb arrange() kasutab juba sisemiselt radix-sortimist.

Pööratud järjestusega indeks: df[nrow(df):1, ]. See pöörab praeguse järjekorra ümber sorteerimise asemel, mis on oluline kaadri segase või rühmitatud olekus. Lähtestage sildid hiljem käsuga rownames(df) <- NULL, kui need tunduvad segased.

Veerg salvestatakse märgina või tegurina, seega R võrdleb seda tekstina ja paneb numbri „2” ette „10”. Kontrollige seda funktsiooniga class(df$col) ja teisendage see enne järjestamist funktsiooniga as.numeric(as.character(df$col)).

Nr. order() tagastab indeksvektori ja df[order(…), ] loob uue raami, seega algne jääb puutumata kuni tulemuse tagasi omistamiseni. Rea nimed säilitavad oma vanad väärtused, mis on kasulik vihje, et raami järjestust muudeti.

Tehisintellekti assistendid suudavad tuvastada tekstina salvestatud veeru, kui numbriline sortimine tundub vale, teisendada baas-R order() kutse dplyr torujuhtmeks ja soovitada stabiilset viigimurdvat veergu. Enne tulemuse usaldamist käivitage alati kood ja kontrollige head() funktsiooni.

Jah. GitHubi koopia Töötab RStudio Desktop 2023.09.0 ja uuemates versioonides ning viib order() ja arrange() kõned lõpule tavalise kommentaari põhjal. Posit hoiatab, et soovitused ei ole deterministlikud, seega vaadake iga rida enne selle käivitamist üle.

Järjesta veeruindeks reaindeksi asemel ümber. df[, order(names(df))] järjestab veerud tähestikulises järjekorras ja df[, c(“c3”, “c1”)] valib selge järjekorra. dplyr kasutajad saavad kutsuda select(df, c3, c1), mis järjestab ümber ja jagab alamhulgad ühe sammuga.

Võta see postitus kokku järgmiselt: