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
Susan SarandonOriginal
2024-12-31 16:41:09762Durchsuche

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

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!

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