order() para una ordenación flexible
Obtenga la permutación de índices para ordenar según uno o varios criterios.
order() para una ordenación flexible es una lección gratuita de R Academy en CoddyKit. Esta es la lección 2 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 order()
order() no devuelve los valores ordenados, sino los índices que permitirían ordenar el vector. Esta indirección la hace mucho más potente que sort(), ya que puede aplicar esos índices a cualquier estructura relacionada.
x <- c(30, 10, 50, 20, 40)
indices <- order(x)
print(indices)
# Verify: x[indices] gives sorted x
print(x[indices])order() en orden descendente
Al igual que sort(), order() acepta decreasing = TRUE para devolver los índices que producen una secuencia descendente. Esto resulta útil para ordenar de mayor a menor.
scores <- c(78, 92, 65, 88, 71)
desc_order <- order(scores, decreasing = TRUE)
cat('Rank order (index):', desc_order, '\n')
cat('Scores high to low:', scores[desc_order], '\n')Ordenar un data frame por una columna
El uso más práctico de order() es ordenar un data frame por una de sus columnas. Pase la columna a order() y use después esos índices para reordenar todas las filas del data frame.
df <- data.frame(
name = c('Charlie', 'Alice', 'Bob', 'Diana'),
age = c(35, 28, 42, 31)
)
sorted_df <- df[order(df$age), ]
print(sorted_df)Ordenar un data frame de forma descendente
Para ordenar un data frame de mayor a menor según una columna numérica, pase decreasing = TRUE a order(). Los nombres de fila (índices) de la salida reflejan las posiciones originales.
products <- data.frame(
item = c('Pen', 'Notebook', 'Stapler', 'Tape'),
price = c(1.5, 4.99, 7.25, 2.10)
)
products[order(products$price, decreasing = TRUE), ]Ordenación por varias columnas
Pase varios vectores a order(), separados por comas. R ordena según el primer argumento y, después, deshace los empates usando el segundo, el tercero y así sucesivamente. Esto reproduce el comportamiento de la cláusula ORDER BY de SQL.
df <- data.frame(
dept = c('HR', 'IT', 'HR', 'IT', 'HR'),
salary = c(50000, 70000, 60000, 65000, 55000)
)
# Sort by dept first, then by salary within dept
df[order(df$dept, df$salary), ]Ordenación múltiple ascendente y descendente
Para ordenar una columna de forma ascendente y otra de forma descendente, niegue la columna numérica descendente con -. Para columnas de caracteres, use xtfrm() para obtener una representación entera ordenable y, después, niéguela.
df <- data.frame(
dept = c('HR', 'IT', 'HR', 'IT', 'HR'),
salary = c(50000, 70000, 60000, 65000, 55000)
)
# dept ascending, salary descending
df[order(df$dept, -df$salary), ]Gestionar NA en order()
order() también tiene un argumento na.last, igual que sort(). De forma predeterminada, na.last = NA, lo que coloca los NA al final. Establezca na.last = TRUE o na.last = FALSE para controlar explícitamente su ubicación.
vals <- c(5, NA, 2, NA, 8, 1)
# Default: NAs sorted last
order(vals)
# NAs first
order(vals, na.last = FALSE)Conservar los nombres de fila después de ordenar
Cuando extrae un subconjunto de un data frame mediante índices de fila, R conserva los nombres de fila originales. Use row.names(df) <- NULL o enfoques con reset= para restablecerlos a 1, 2, 3, ... después de ordenar.
df <- data.frame(
city = c('Paris', 'Tokyo', 'NYC'),
pop = c(2.1, 13.9, 8.3)
)
sorted <- df[order(df$pop), ]
print(sorted)
# Reset row names
row.names(sorted) <- NULL
print(sorted)order() frente a sort()
La diferencia clave es la siguiente: sort(x) devuelve los valores ordenados, mientras que order(x) devuelve las posiciones ordenadas. Use sort() cuando solo necesite los valores y order() cuando necesite reorganizar varias estructuras de datos relacionadas a la vez.
x <- c(50, 20, 80, 10, 60)
cat('sort(x) :', sort(x), '\n')
cat('order(x) :', order(x), '\n')
cat('x[order(x)]:', x[order(x)], '\n')Ordenar un data frame por una columna de cadenas
También puede ordenar por columnas de caracteres. order(df$name) devuelve los índices de las filas en orden alfabético según la columna de nombres; después, puede usarlos para reordenar el data frame.
employees <- data.frame(
name = c('Zara', 'Ahmed', 'Maria', 'Bruno'),
tenure = c(3, 7, 2, 5)
)
employees[order(employees$name), ]Encadenar order() para ordenamientos complejos
El ordenamiento en tres niveles es sencillo: pase tres vectores a order(). Cada argumento adicional se utiliza como criterio de desempate para los valores iguales de los argumentos anteriores.
df <- data.frame(
region = c('West', 'East', 'West', 'East', 'West'),
dept = c('HR', 'IT', 'HR', 'IT', 'IT'),
score = c(85, 90, 78, 88, 92)
)
df[order(df$region, df$dept, df$score), ]Comprobación rápida
¿Qué devuelve order(x) al aplicarlo a un vector x?
Conclusiones clave sobre order()
Conclusiones clave sobre order():
order(x)devuelve índices, no valores; usex[order(x)]para obtener los valores ordenados- Ordene data frames con
df[order(df$col), ] - Ordenación por varias columnas:
order(df$a, df$b); los empates enase resuelven conb - Niegue las columnas numéricas con
-para ordenar de forma descendente en una ordenación múltiple - Controle la ubicación de los NA con
na.last = TRUE/FALSE/NA - A diferencia de
sort(),order()permite ordenar conjuntamente estructuras paralelas
df <- data.frame(
name = c('Eve', 'Bob', 'Alice', 'Charlie'),
score = c(88, 92, 88, 75)
)
# Sort by score descending, then name ascending for ties
df[order(-df$score, df$name), ]Preguntas frecuentes
¿La lección «order() para una ordenación flexible» es gratis?
Sí — el texto completo de «order() para una ordenación flexible» 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 «order() para una ordenación flexible»?
Obtenga la permutación de índices para ordenar según uno o varios criterios. 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 2 de 4.
¿Cuánto tiempo toma la lección «order() para una ordenación flexible»?
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
- Ordenación de vectores con sort()
- order() para una ordenación flexible
- Asignación de rangos con rank()
- Ordenación de data frames por columna