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
Libérer: 2024-12-29 05:09:10
original
569 Les gens l'ont consulté

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")
Copier après la connexion

Rang dense :

as.integer(factor(x))
Copier après la connexion

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")
Copier après la connexion

Classez chaque identifiant par valeur au sein du groupe

DT[, valRank := rank(-value), by = "group"]
Copier après la connexion

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"]
Copier après la connexion

É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']]
Copier après la connexion

Ligne suivante :

DT[, nex := DT[J(group, idRank + 1), value, mult = 'first']]
Copier après la connexion

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']]
Copier après la connexion

Deux lignes suivantes :

DT[, nex2 := DT[J(group, idRank + 2), value, mult = 'first']]
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal