Heim > Datenbank > MySQL-Tutorial > Wie kann ich die RANK-Funktionen von SQL (ROW_NUMBER, RANK, DENSE_RANK, LEAD, LAG) in R replizieren?

Wie kann ich die RANK-Funktionen von SQL (ROW_NUMBER, RANK, DENSE_RANK, LEAD, LAG) in R replizieren?

Susan Sarandon
Freigeben: 2024-12-31 16:41:09
Original
770 Leute haben es durchsucht

How Can I Replicate SQL's RANK Functions (ROW_NUMBER, RANK, DENSE_RANK, LEAD, LAG) in R?

Emulation der Rangfunktionen von SQL in R

Rangfunktionsäquivalente in R

Die Daten. Das Tabellenpaket bietet ähnliche Funktionen wie der SQL-Rank von Oracle Funktionen.

  • ROW_NUMBER(): Die Nachahmung dieser Funktion ist unkompliziert.
  • RANK(): data.table's rank(x, ties.method = "min") ähnelt der von Oracle RANK().
  • DENSE_RANK(): Konvertieren Sie Werte in einen Faktor und geben Sie ganzzahlige Werte zurück, um diese Funktion nachzuahmen.

Beispiel zur Verwendung einer Rangfunktion

library(data.table)

DT <- data.table(ID = seq_len(4 * 3),
                 group = rep(1:4, each = 3),
                 value = rnorm(4 * 3),
                 info = c(sample(c("a", "b"), 4 * 2, replace = TRUE),
                           sample(c("c", "d"), 4, replace = TRUE)),
                 key = "ID")

DT[, valRank := rank(-value), by = "group"]
Nach dem Login kopieren

DENSE_RANK Mimikry

DT[, infoRank := rank(info, ties.method = "min"), by = "group"]
DT[, infoRankDense := as.integer(factor(info)), by = "group"]
Nach dem Login kopieren

LEAD- und LAG-Imitation

Erstellen Sie eine Rangvariable basierend auf der Reihenfolge der IDs innerhalb von Gruppen. Verwenden Sie dann J(), um Werte aus vorherigen oder nachfolgenden Datensätzen abzurufen.

DT[, idRank := rank(ID), by = "group"]
setkey(DT, group, idRank)

DT[, prev := DT[J(group, idRank - 1), value, mult = 'last']]
Nach dem Login kopieren

Fügen Sie für LEAD den entsprechenden Offset zu idRank hinzu und verwenden Sie multi = 'first':

DT[, nex := DT[J(group, idRank + 1), value, mult = 'first']]
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie kann ich die RANK-Funktionen von SQL (ROW_NUMBER, RANK, DENSE_RANK, LEAD, LAG) in R replizieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage