Heim > Datenbank > MySQL-Tutorial > Wie repliziere ich die SQL-Funktionen RANK, DENSE_RANK, LEAD und LAG in R?

Wie repliziere ich die SQL-Funktionen RANK, DENSE_RANK, LEAD und LAG in R?

DDD
Freigeben: 2024-12-29 05:09:10
Original
655 Leute haben es durchsucht

How to Replicate SQL's RANK, DENSE_RANK, LEAD, and LAG Functions in R?

So emulieren Sie die Rangfunktionen von SQL in R

Partitionierung und Rangfolge von Daten sind gängige Vorgänge in SQL, und R-Benutzer benötigen häufig ähnliche Funktionen. Beispielsweise weisen die Oracle-Funktionen ROW_NUMBER(), RANK() und DENSE_RANK() Zeilen basierend auf ihrer Reihenfolge innerhalb von Gruppen oder über eine gesamte Tabelle ganzzahlige Werte zu.

Das R-Äquivalent des SQL-Rangs Funktionen

Das data.table-Paket bietet ähnliche Funktionen wie die Partitions- und Rankingfunktionen von SQL. In R werden Rangfunktionen wie folgt dargestellt:

Rang:

rank(x, ties.method = "min")
Nach dem Login kopieren

Dichte Rang:

as.integer(factor(x))
Nach dem Login kopieren

Beispiel

Um die Verwendung dieser Funktionen zu veranschaulichen, betrachten Sie Folgendes Daten:

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")
Nach dem Login kopieren

Jede ID nach Wert innerhalb der Gruppe ordnen

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

Dichte Rangwerte nach Informationen innerhalb der Gruppe

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

Emulation von LEAD und LAG

LEAD und LAG-Funktionen werden verwendet, um den Wert der nächsten oder vorherigen Zeile in einer Gruppe zurückzugeben. In R kann dies mit der Funktion J() erreicht werden:

Vorherige Zeile:

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

Nächste Zeile:

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

Versetzen des Zeilenindex

Um Werte abzurufen Weiter entfernte Zeilen (z. B. die vorherigen oder nächsten beiden Zeilen) versetzen den idRank entsprechend:

Vorherige zwei Zeilen:

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

Nächste zwei Zeilen :

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

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

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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage