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!