Heim >Datenbank >MySQL-Tutorial >Wie kann ich die RANK-Funktionen von SQL (ROW_NUMBER, RANK, DENSE_RANK, LEAD, LAG) in R replizieren?
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.
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"]
DENSE_RANK Mimikry
DT[, infoRank := rank(info, ties.method = "min"), by = "group"] DT[, infoRankDense := as.integer(factor(info)), by = "group"]
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']]
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']]
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!