0Pricing
R Academy · Lección

Asignación de rangos con rank()

Asigne rangos con métodos para resolver empates: average, first, min, max y random.

Asignación de rangos con rank() es una lección gratuita de R Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de R Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de R Academy incluye 4 lecciones en total.

Qué devuelve rank()

rank(x) devuelve los rangos muestrales de los valores de un vector. El valor más pequeño obtiene el rango 1, el segundo más pequeño obtiene el rango 2 y así sucesivamente. A diferencia de order(), la salida tiene la misma longitud que la entrada y cada posición contiene su rango.

scores <- c(78, 92, 65, 88, 71)
ranks <- rank(scores)
print(scores)
print(ranks)

Gestionar empates: método del promedio

Cuando hay valores iguales (empates), rank() usa el argumento ties.method para decidir cómo asignar los rangos. El valor predeterminado es 'average': los elementos empatados reciben la media de los rangos que habrían ocupado.

x <- c(10, 20, 20, 30)
# Default: average of positions 2 and 3 = 2.5
rank(x)
rank(x, ties.method = 'average')

Método de empates: first y last

ties.method = 'first' asigna el rango menor al elemento empatado que aparece primero en el vector. 'last' hace lo contrario: el elemento que aparece antes recibe el rango mayor.

x <- c(10, 20, 20, 30)
cat('first:', rank(x, ties.method = 'first'), '\n')
cat('last: ', rank(x, ties.method = 'last'),  '\n')

Método de empates: min y max

'min' asigna a todos los elementos empatados el rango mínimo que podrían tener (se usa en deportes: dos jugadores empatados en el tercer puesto reciben ambos el rango 3 y nadie recibe el rango 4). 'max' asigna a todos los elementos empatados el rango máximo.

x <- c(10, 20, 20, 30)
cat('min:', rank(x, ties.method = 'min'), '\n')
cat('max:', rank(x, ties.method = 'max'), '\n')

Método de empates: random

ties.method = 'random' resuelve los empates asignando aleatoriamente rangos distintos entre los elementos empatados. Cada llamada puede producir un resultado diferente. Resulta útil cuando necesita rangos enteros únicos, pero no le importa el orden utilizado para resolver los empates.

x <- c(10, 20, 20, 20, 30)
set.seed(42)
cat('random run 1:', rank(x, ties.method = 'random'), '\n')
set.seed(99)
cat('random run 2:', rank(x, ties.method = 'random'), '\n')

Rango denso frente a rango estándar

El rank() de R produce una clasificación estándar de competición (1, 2, 2, 4). Para obtener una clasificación densa (1, 2, 2, 3, sin saltos), use rank(x, ties.method = 'min') sobre valores únicos o utilice los paquetes data.table o dplyr. Esta es una alternativa con R base:

x <- c(10, 20, 20, 30)
# Standard ranking (gaps after ties)
cat('Standard:', rank(x, ties.method = 'min'), '\n')
# Dense ranking: rank of sorted unique values
dense <- match(x, sort(unique(x)))
cat('Dense:   ', dense, '\n')

rank() frente a order() frente a sort()

Estas tres funciones están relacionadas, pero devuelven cosas diferentes: sort(x) devuelve los valores ordenados, order(x) devuelve las posiciones que permiten ordenar el vector y rank(x) devuelve el rango de cada posición. A continuación se muestra una comparación lado a lado.

x <- c(30, 10, 50, 20, 40)
cat('x       :', x,        '\n')
cat('sort(x) :', sort(x),  '\n')
cat('order(x):', order(x), '\n')
cat('rank(x) :', rank(x),  '\n')

Clasificación en orden descendente

Para clasificar de mayor a menor (rango 1 = valor más alto), niegue el vector antes de pasarlo a rank(). Este es el patrón utilizado en las tablas de clasificación en las que el rango 1 significa el mejor resultado.

scores <- c(78, 92, 65, 88, 71)
desc_ranks <- rank(-scores)
cat('Scores:      ', scores,     '\n')
cat('Rank (best=1):', desc_ranks, '\n')

Añadir rangos a un data frame

Una tarea habitual consiste en añadir una columna de rangos a un data frame. Use rank() con ties.method = 'min' y niegue los valores para ordenar de forma descendente y crear una tabla de clasificación adecuada.

df <- data.frame(
  player = c('Alice', 'Bob', 'Carol', 'Dave'),
  score  = c(250, 400, 250, 375)
)
df$rank <- rank(-df$score, ties.method = 'min')
df[order(df$rank), ]

rank() con valores NA

rank() tiene un argumento na.last, al igual que sort() y order(). El valor predeterminado es 'keep', que asigna el rango NA a los valores NA y clasifica entre sí los elementos que no son NA.

x <- c(5, NA, 2, NA, 8, 1)
cat('na.last=keep:  ', rank(x, na.last = 'keep'), '\n')
cat('na.last=TRUE:  ', rank(x, na.last = TRUE),   '\n')
cat('na.last=FALSE: ', rank(x, na.last = FALSE),  '\n')

Rangos percentiles

Convierta los rangos en percentiles dividiéndolos por el recuento total. Un rango percentil indica qué fracción de los valores es menor o igual que un elemento determinado. Esto resulta útil en estadística y en la evaluación educativa.

scores <- c(60, 75, 82, 91, 68, 77, 85, 95)
n <- length(scores)
pct_rank <- rank(scores) / n * 100
result <- data.frame(score = scores, percentile = round(pct_rank, 1))
result[order(result$score), ]

Comprobación rápida

¿Qué valor de ties.method asigna a todos los elementos empatados el mismo rango más bajo posible (como en los deportes, donde dos jugadores comparten el tercer puesto y nadie obtiene el cuarto)?

Conclusiones clave sobre rank()

Conclusiones clave sobre rank():

  • rank(x) devuelve el rango de cada elemento (la misma longitud que la entrada)
  • Valor predeterminado ties.method = 'average': los elementos empatados comparten la media de sus rangos
  • 'min' = estilo deportivo (rango inferior compartido), 'max' = rango superior compartido
  • 'first' y 'last' resuelven los empates según el orden de aparición
  • Use rank(-x) para obtener rangos descendentes (rango 1 = valor más grande)
  • Añada columnas de rangos a los data frames con df$rank <- rank(-df$score, ties.method='min')
x <- c(10, 30, 20, 30, 10)
cat('average:', rank(x, ties.method = 'average'), '\n')
cat('min:    ', rank(x, ties.method = 'min'),     '\n')
cat('max:    ', rank(x, ties.method = 'max'),     '\n')
cat('first:  ', rank(x, ties.method = 'first'),   '\n')

Preguntas frecuentes

¿La lección «Asignación de rangos con rank()» es gratis?

Sí — el texto completo de «Asignación de rangos con rank()» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de R Academy, actualiza a CoddyKit PRO. El curso de R Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Asignación de rangos con rank()»?

Asigne rangos con métodos para resolver empates: average, first, min, max y random. Practicas R Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar R Academy?

No se requiere experiencia previa. R Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.

¿Cuánto tiempo toma la lección «Asignación de rangos con rank()»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de R Academy?

Sí. Cada lección de R Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Ordenación de vectores con sort()
  2. order() para una ordenación flexible
  3. Asignación de rangos con rank()
  4. Ordenación de data frames por columna
← Volver a R Academy