Maison > base de données > tutoriel mysql > Comment puis-je répliquer les fonctions RANK de SQL (ROW_NUMBER, RANK, DENSE_RANK, LEAD, LAG) dans R ?

Comment puis-je répliquer les fonctions RANK de SQL (ROW_NUMBER, RANK, DENSE_RANK, LEAD, LAG) dans R ?

Susan Sarandon
Libérer: 2024-12-31 16:41:09
original
763 Les gens l'ont consulté

How Can I Replicate SQL's RANK Functions (ROW_NUMBER, RANK, DENSE_RANK, LEAD, LAG) in R?

Émulation des fonctions de classement de SQL dans R

Équivalents des fonctions de classement dans R

Les données. Le package de table offre des fonctionnalités similaires au classement SQL d'Oracle. fonctions.

  • ROW_NUMBER() : imiter cette fonction est simple.
  • RANK() : le rang de data.table (x, tie.method = "min") est similaire à celui d'Oracle RANK().
  • DENSE_RANK() : convertit les valeurs en facteur et renvoie des valeurs entières pour imiter cette fonction.

Exemple d'utilisation de la fonction Rank

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

DENSE_RANK Mimétisme

DT[, infoRank := rank(info, ties.method = "min"), by = "group"]
DT[, infoRankDense := as.integer(factor(info)), by = "group"]
Copier après la connexion

Imitation LEAD et LAG

Créez une variable de classement basée sur l'ordre des identifiants au sein des groupes. Ensuite, utilisez J() pour récupérer les valeurs des enregistrements précédents ou suivants.

DT[, idRank := rank(ID), by = "group"]
setkey(DT, group, idRank)

DT[, prev := DT[J(group, idRank - 1), value, mult = 'last']]
Copier après la connexion

Pour LEAD, ajoutez le décalage approprié à idRank et utilisez multi = 'first' :

DT[, nex := DT[J(group, idRank + 1), 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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal