Heim >Datenbank >MySQL-Tutorial >Wie repliziere ich die SQL-Funktionen RANK, DENSE_RANK, LEAD und LAG 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!