(R) data.Table’s Frank ()

URMĂREȘTE-NE
16,065FaniÎmi place
1,142CititoriConectați-vă

(social4i size = „mic” align = „align-left”)

->

(Acest articol a fost publicat pentru prima dată pe R pe blogul lui Zhenguo Zhangși a contribuit cu drag la R-Bloggers). (Puteți raporta problema despre conținutul de pe această pagină aici)


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")
Tabelul 1: Exemplu de date.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")
Tabelul 2: Date clasate.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")
Tabelul 3: Date clasate.Table până la a 2 -a și a 3 -a coloane
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")
Tabelul 4: Clasat date.Table cu a 2 -a coloană
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/-

La Lasă un comentariu Pentru autor, vă rugăm să urmați linkul și să comentați pe blogul lor: R pe blogul lui Zhenguo Zhang.

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 ()

Dominic Botezariu
Dominic Botezariuhttps://www.noobz.ro/
Creator de site și redactor-șef.

Cele mai noi știri

Pe același subiect

LĂSAȚI UN MESAJ

Vă rugăm să introduceți comentariul dvs.!
Introduceți aici numele dvs.