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.