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
Susan Sarandonoriginal
2024-12-31 16:41:09752parcourir

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

DENSE_RANK Mimétisme

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

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

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

DT[, nex := DT[J(group, idRank + 1), 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