R

Ordenar los datos en R utilizando los valores de otra columna

En ciertas ocasiones es necesario ordenar los datos de un dataframe o matiz en base a los valores de una columna. Por ejemplo, cuando se tiene los datos de clientes y se desea ordenar por alguna variable como el gasto o la edad. En esta entrada se va a explicar cómo ordenar los datos en R en base a una columna.

Creación de un conjunto de datos de ejemplo

En primer lugar, se va a crear unos datos de ejemplo. Un dataframe que contiene los datos de cuatro clientes. Esto es lo que se hace con el siguiente código

clients <- data.frame(first_name = c('Sigrid', 'Joe', 'Theodoric', 'Dyane'),
                      last_name = c('Mannock', 'Hinners', 'Rivers', 'Axtonne'),
                      age = c(27, 31, 36, 30),
                      amount = c(7.71, 5.50, 1.11, NA))
  first_name last_name age amount
1     Sigrid   Mannock  27   7.71
2        Joe   Hinners  31   5.50
3  Theodoric    Rivers  36   1.11
4      Dyane   Axtonne  30     NA

Ordenación de los datos

Ahora puede ser interesante ordenar los datos de los clientes en base a su gasto. Para ello, en lugar de la función sort que devuelve los elementos ordenados, se ha de utiliza la función order que devuelve la ordenación de los elementos. Así, para ordenar el dataframe en base a la edad simplemente se ha utilizar el orden indicado.

clients[order(clients$amount), ]
  first_name last_name age amount
3  Theodoric    Rivers  36   1.11
2        Joe   Hinners  31   5.50
1     Sigrid   Mannock  27   7.71
4      Dyane   Axtonne  30     NA

Al ejecutar el ejemplo se observa que los clientes aparecen ordenados de menor a mayor gasto. Para cambiar el orden simplemente se le ha de indicar a la función asignando el valor falso a la propiedad decreasing.

clients[order(clients$amount, decreasing = TRUE), ]
  first_name last_name age amount
1     Sigrid   Mannock  27   7.71
2        Joe   Hinners  31   5.50
3  Theodoric    Rivers  36   1.11
4      Dyane   Axtonne  30     NA

Finalmente, si se desea que los valore nulos aparezcan en primer lugar se puede hacer con la propiedad na.last. Por defecto es cierto, por lo que se ha de asignar el valor falso para que en primer lugar aparezcan los NA.

clients[order(clients$amount, decreasing = TRUE, na.last = FALSE), ]
  first_name last_name age amount
4      Dyane   Axtonne  30     NA
1     Sigrid   Mannock  27   7.71
2        Joe   Hinners  31   5.50
3  Theodoric    Rivers  36   1.11

Ordenación de los datos con matrices

En caso de trabajar con matrices en lugar de dataframe se puede utilizar igualmente la función order de forma análoga. Por ejemplo, si se crea una matriz aleatoria

set.seed(0)
x <- matrix(sample(1:100, 21, replace=TRUE), 7, 3)
     [,1] [,2] [,3]
[1,]   90   95   39
[2,]   27   67   77
[3,]   38   63   50
[4,]   58    7   72
[5,]   91   21  100
[6,]   21   18   39
[7,]   90   69   78

Simplemente se ha ejecutar

x[order(x[,3]),]
     [,1] [,2] [,3]
[1,]   90   95   39
[2,]   21   18   39
[3,]   38   63   50
[4,]   58    7   72
[5,]   27   67   77
[6,]   90   69   78
[7,]   91   21  100

Al trabajar con matrices se puede ordenar esta por columnas. Esto se puede hacer de forma análoga

x[, order(x[3,])]
     [,1] [,2] [,3]
[1,]   90   39   95
[2,]   27   77   67
[3,]   38   50   63
[4,]   58   72    7
[5,]   91  100   21
[6,]   21   39   18
[7,]   90   78   69

Conclusiones

En esta entrada se ha visto cómo ordenar tanto un dataframe como una matriz en R utilizando los valores de una columna.

Imágenes: Pixabay

¿Te ha parecido de utilidad el contenido?

Daniel Rodríguez

Share
Published by
Daniel Rodríguez

Recent Posts

Por Qué las Contraseñas Largas son más Seguras que las Complejas

"Tu contraseña debe tener al menos 8 caracteres, una mayúscula, un número y un símbolo…

9 horas ago

Gini, KS y AUC: Cómo Medir la Calidad de un Modelo de Credit Scoring

Cuando un analista de riesgo presenta un nuevo scorecard ante el comité de dirección, la…

2 días ago

Curiosidad: De dónde vienen foo, bar y foobar

Si revisáis código o documentación de otros programadores, tarde o temprano os toparéis con dos…

1 semana ago

BG/NBD + Gamma/Gamma: el modelo probabilístico para CLV en compras continuas

Los dos artículos anteriores cubrieron el CLV clásico —una fórmula útil pero que trata a…

1 semana ago

Errores habituales al trabajar con DataFrames grandes en Pandas (y cómo evitarlos)

Hay un momento muy concreto en la vida de casi todo análisis: el código que…

2 semanas ago

Champion vs Challenger: Cómo los Bancos Validan Modelos Nuevos antes de Ponerlos en Producción

Has construido un nuevo modelo de credit scoring. Las métricas de validación son mejores que…

2 semanas ago

This website uses cookies.