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
DDDOriginal
2024-12-29 05:09:10649Durchsuche

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

Dichte Rang:

as.integer(factor(x))

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

Jede ID nach Wert innerhalb der Gruppe ordnen

DT[, valRank := rank(-value), by = "group"]

Dichte Rangwerte nach Informationen innerhalb der Gruppe

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

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']]

Nächste Zeile:

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

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']]

Nächste zwei Zeilen :

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

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!

Stellungnahme:
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