
Hasta la fecha, si necesitaba crear un ranking o un orden con R, realizaba la tarea del siguiente modo:
nombres <- c("grupo_1", "grupo_2")
grupo <- sample(nombres, 10, replace = TRUE, prob = c(0.5, 0.5))
dataset <- data.frame(grupo)
dataset$importes <- runif(10, 100, 30000)
# Creación del ranking de las variables agrupadas
dataset$ranking <- ave(dataset$importes, dataset$grupo,
FUN = function(x) rank(x, ties.method = "first")
)
Es una agrupación de factores a la que asignamos el orden con rank; con ties.method = "first", esta agrupación se lleva a cabo desde el primer nivel del factor. El resultado se puede comprobar haciendo:
library(reshape)
dataset <- sort_df(dataset, vars = c('grupo', 'importes'))
Otra solución posible la tenemos con plyr:
library(plyr)
dataset <- ddply(dataset, .(grupo), transform, ranking2 = (seq_along(importes)))
Si nuestra agrupación tiene más de una variable, podemos hacer:
dataset$grupo2 <- rpois(10, 1)
dataset <- ddply(dataset, .(grupo, grupo2), transform, ranking3 = (seq_along(importes)))
Imagino que en alguna ocasión os habéis encontrado con este problema; pues ya conocéis dos formas de solucionarlo. Saludos.