(social4i size = „mic” align = „align-left”)
->
Doriți să vă împărtășiți conținutul pe R-Bloggers? Faceți clic aici dacă aveți un blog sau aici dacă nu.
Blogul lui Zhenguo Zhang/2025/04/12/R-DATA-table-S-Frank/-
knitr::opts_chunk$set(echo = TRUE, message = FALSE, warning = FALSE) library(knitr) library(data.table)
Se poate folosi data.table::frank() Pentru a clasifica rândurile unui date.table sau pur și simplu un vector. În comparație cu funcția R de bază rank(), frank() este mai rapid. Astăzi voi arăta cum să folosesc această funcție.
În primul rând, să generăm un exemplu de date.Table cu 10 rânduri și 3 coloane, pentru simplitate, vom face ca primele 2 coloane să fie întregi, iar ultima este un personaj. De asemenea, vom dubla unele valori pentru a arăta cum sunt sortate valorile legate:
set.seed(123) n <- 10 dt <- data.table( a = sample(1:10, n, replace = TRUE), b = sample(1:10, n, replace = TRUE), c = sample(letters(1:5), n, replace = TRUE) ) kable(dt, caption = "Example data.table")
| o | b | C. |
|---|---|---|
| 3 | 5 | o |
| 3 | 3 | C. |
| 10 | 9 | D. |
| 2 | 9 | o |
| 6 | 9 | C. |
| 5 | 3 | e |
| 4 | 8 | D. |
| 6 | 10 | b |
| 9 | 7 | e |
| 10 | 10 | o |
În primul rând, să vedem cum să folosim frank() pentru a clasifica toate datele.Table.
dt(, rank := frank(.SD)) kable(dt(order(rank)), caption = "Ranked data.table")
| o | b | C. | rang |
|---|---|---|---|
| 2 | 9 | o | 1 |
| 3 | 3 | C. | 2 |
| 3 | 5 | o | 3 |
| 4 | 8 | D. | 4 |
| 5 | 3 | e | 5 |
| 6 | 9 | C. | 6 |
| 6 | 10 | b | 7 |
| 9 | 7 | e | 8 |
| 10 | 9 | D. | 9 |
| 10 | 10 | o | 10 |
După cum puteți vedea, frank() Funcția clasează rândurile datelor.Table verificând prima coloană, apoi a doua coloană și, în final, a treia coloană.
De asemenea, se poate sorta o date.Table bazată pe coloane selectate, de exemplu, să folosim coloanele a 2 -a și a 3 -a pentru a clasifica datele.Table. Dar pentru aceasta, trebuie să -i folosești varianta Frankv ():
dt(, rank := frankv(.SD, cols = c("b","c")))
kable(dt(order(rank)), caption = "Ranked data.table by 2nd and 3rd columns")
| o | b | C. | rang |
|---|---|---|---|
| 3 | 3 | C. | 1 |
| 5 | 3 | e | 2 |
| 3 | 5 | o | 3 |
| 9 | 7 | e | 4 |
| 4 | 8 | D. | 5 |
| 2 | 9 | o | 6 |
| 6 | 9 | C. | 7 |
| 10 | 9 | D. | 8 |
| 10 | 10 | o | 9 |
| 6 | 10 | b | 10 |
În cele din urmă, am dori să vorbim despre ties.method argument. Pentru a face simplu, vom folosi în mod simit a doua coloană pentru a clasifica tabelul, astfel încât să puteți vedea efectul ties.method argument.
newDT <- dt(, .(b)) newDT(, rankAverage := frank(b, ties.method = "average")) # the default newDT(, rankFirst := frank(b, ties.method = "first")) newDT(, rankLast := frank(b, ties.method = "last")) newDT(, rankRandom := frank(b, ties.method = "random")) newDT(, rankMax := frank(b, ties.method = "max")) newDT(, rankMin := frank(b, ties.method = "min")) newDT(, rankDense := frank(b, ties.method = "dense")) kable(newDT(order(b)), caption = "Ranked data.table by 2nd column")
| b | Ransaverage | Rankfirst | ranklast | Rankrandom | Rankmax | Rankmin | Rankdense |
|---|---|---|---|---|---|---|---|
| 3 | 1.5 | 1 | 2 | 2 | 2 | 1 | 1 |
| 3 | 1.5 | 2 | 1 | 1 | 2 | 1 | 1 |
| 5 | 3.0 | 3 | 3 | 3 | 3 | 3 | 2 |
| 7 | 4.0 | 4 | 4 | 4 | 4 | 4 | 3 |
| 8 | 5.0 | 5 | 5 | 5 | 5 | 5 | 4 |
| 9 | 7.0 | 6 | 8 | 7 | 8 | 6 | 5 |
| 9 | 7.0 | 7 | 7 | 8 | 8 | 6 | 5 |
| 9 | 7.0 | 8 | 6 | 6 | 8 | 6 | 5 |
| 10 | 9.5 | 9 | 10 | 9 | 10 | 9 | 6 |
| 10 | 9.5 | 10 | 9 | 10 | 10 | 9 | 6 |
După cum puteți vedea, iată cum ties.method Argumentul funcționează:
- Media: media rândurilor valorilor legate
- În primul rând: ordinea în care valorile apar în date
- Ultima: ordinea în care valorile apar în date
- aleatoriu: o ordine aleatorie pentru legături
- Max: rangul maxim al valorilor legate
- min: rangul minim al valorilor legate
- Dens: valorile dintr -un set de egalitate obțin același rang, iar valoarea rangului crește cu 1 atunci când treceți la următorul set de egalitate. Aceasta este o caracteristică unică a
frank()și nu este disponibil în baza R.
Când cineva dorește să folosească rangul pentru a alege N rânduri de top, este important să știm cum este calculat rangul; În acest caz, poate doriți să evitați ties.method Valori: max, minși dense.
Programare fericită
-/2025/04/12/R-data-table-s-frank/-
Oferte R-Bloggers.com Actualizări zilnice prin e-mail Despre știri și tutoriale despre învățarea R și multe alte subiecte. Faceți clic aici dacă doriți să postați sau să găsiți o lucrare R/Data-Science.
Doriți să vă împărtășiți conținutul pe R-Bloggers? Faceți clic aici dacă aveți un blog sau aici dacă nu.
Continuați să citiți: (R) data.Table’s Frank ()
