Maison >base de données >tutoriel mysql >Comment répliquer les fonctions RANK, DENSE_RANK, LEAD et LAG de SQL dans R ?

Comment répliquer les fonctions RANK, DENSE_RANK, LEAD et LAG de SQL dans R ?

DDD
DDDoriginal
2024-12-29 05:09:10590parcourir

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

Comment émuler les fonctions de classement de SQL dans R

Le partitionnement et le classement des données sont des opérations courantes dans SQL, et les utilisateurs de R ont souvent besoin de fonctionnalités similaires. Par exemple, les fonctions Oracle ROW_NUMBER(), RANK() et DENSE_RANK() attribuent des valeurs entières aux lignes en fonction de leur ordre au sein des groupes ou sur une table entière.

L'équivalent R du classement SQL Fonctions

Le package data.table fournit des fonctionnalités similaires aux capacités de partition et de classement de SQL. Dans R, les fonctions de classement sont représentées comme suit :

Rang :

rank(x, ties.method = "min")

Rang dense :

as.integer(factor(x))

Exemple

Pour illustrer l'utilisation de ces fonctions, considérons ce qui suit données :

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

Classez chaque identifiant par valeur au sein du groupe

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

Valeurs de classement denses par informations au sein du groupe

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

Émulation de LEAD et LAG

LEAD et Les fonctions LAG sont utilisées pour renvoyer la valeur de la ligne suivante ou précédente d'un groupe. Dans R, cela peut être réalisé en utilisant la fonction J() :

Ligne précédente :

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

Ligne suivante :

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

Décalage de l'index des lignes

Pour récupérer les valeurs des lignes plus loin (par exemple, les deux lignes précédentes ou suivantes), décalez l'idRank en conséquence :

Deux lignes précédentes :

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

Deux lignes suivantes :

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn