R

Cómo ordenar dataframe en base a múltiples columnas en R

Una tarea bastante habitual cuando se trabaja con conjuntos de datos es ordenar los registros en base los valores de una o varias columnas. Por ejemplo, buscar los clientes con mayor número de visitas y, a igual número de visitas, ordenarlos por gasto. Lo que se pude conseguir fácilmente en R. Únicamente hay que combinar el uso de order() con with() para poder ordenar dataframe en base a múltiples columnas.

La funciones order() y with()

La función order() permite devolver la permutación con la que se puede ordenar el vector que se le ha pasado como parámetro. Una ordenación que puede ser tanto creciente como decreciente. En el caso de que el parámetro sea un conjunto de datos, la permutación se basa en los valores de la primera columna. Por lo que es ampliamente utilizado para ordenar conjuntos de datos.

Por otro lado, la función with() permite la evaluación de una expresión en un conjunto de datos. Lo que simplifica la evaluación de funciones en estos elementos.

Ordenar dataframe en base a una columna

Para ver cómo se pueden combinar las funciones order() y with() vamos a utilizar el conjunto de datos incluido en R mtcars. Un conjunto en el que se puede consultar diferentes datos de 32 coches. Conjunto de datos cuyos primeros registros son

                    mpg cyl disp  hp drat    wt  qsec vs am gear carb
 Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
 Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
 Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
 Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
 Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
 Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1

Uno de los datos que se puede consultar es el número de marchas (gear) del modelo. En el caso querer ordenar los datos por este valor simplemente tenemos que hacer

mtcars[with(mtcars, order(gear)), ]

Esto es, indicar mediante with() que se aplique la función order() a la columna gear del conjunto de datos mtcars. Usando el valor obtenido para ordenar el conjunto de datos inicial. Ahora, los primeros registros del conjunto de datos ordenados son

                    mpg cyl  disp  hp drat    wt  qsec vs am gear carb
 Hornet 4 Drive    21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
 Hornet Sportabout 18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
 Valiant           18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
 Duster 360        14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
 Merc 450SE        16.4   8 275.8 180 3.07 4.070 17.40  0  0    3    3
 Merc 450SL        17.3   8 275.8 180 3.07 3.730 17.60  0  0    3    3

Por defecto la ordenación es ascendente, aunque es muy fácil cambiar el orden. Simplemente hay que indicar el nombre de la variable con un signo - delante para cambiar el orden, esto es:

mtcars[with(mtcars, order(-gear)), ]

Con lo que ahora los primeros registros del conjunto de datos pasan a ser

                 mpg cyl  disp  hp drat    wt  qsec vs am gear carb
 Porsche 914-2  26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2
 Lotus Europa   30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2
 Ford Pantera L 15.8   8 351.0 264 4.22 3.170 14.50  0  1    5    4
 Ferrari Dino   19.7   6 145.0 175 3.62 2.770 15.50  0  1    5    6
 Maserati Bora  15.0   8 301.0 335 3.54 3.570 14.60  0  1    5    8
 Mazda RX4      21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4

Ordenar dataframe en base a múltiples columnas

Una vez ordenados los vehículos en base al número de marchas puede que nos interese saber cuales tienen un mayor consumo. Valor que se encuentra en la columna mpg. Para que los datos se ordenen en segundo lugar por esta solamente hay que pasarla como segundo parámetro de la función order(). Así para ordenar el conjunto de mayor a menor consumo solo hay que escribir

mtcars[with(mtcars, order(-gear, mpg)), ]

Obteniendo como primeros registros de este conjunto los siguientes valores

                 mpg cyl  disp  hp drat    wt qsec vs am gear carb
 Maserati Bora  15.0   8 301.0 335 3.54 3.570 14.6  0  1    5    8
 Ford Pantera L 15.8   8 351.0 264 4.22 3.170 14.5  0  1    5    4
 Ferrari Dino   19.7   6 145.0 175 3.62 2.770 15.5  0  1    5    6
 Porsche 914-2  26.0   4 120.3  91 4.43 2.140 16.7  0  1    5    2
 Lotus Europa   30.4   4  95.1 113 3.77 1.513 16.9  1  1    5    2
 Merc 280C      17.8   6 167.6 123 3.92 3.440 18.9  1  0    4    4

Esto es los cinco primeros registros son los cinco vehículos con cinco marchas. Entre ellos el primero es el Maserati Bora con el mayor consumo 15 millas por galón, mientras que el que tiene menor consumo es el quinto, el Lotus Europa con 30,4 millas por galón. Obtenido así el resultado que nos habíamos planteado.

Obviamente, en el caso de que deseemos ordenar los datos en base a una tercera columna, solamente se tendría que agregar esta a la función order(). Siendo posible ordenar cada una de ellas tanto en orden ascendente como descendente.

Conclusiones

En esta ocasión hemos visto un pequeño truco para ordenar dataframe en base a múltiples columnas en R. Este truco es muy útil en las fases previas de análisis de datos, ya que permite ordenar estos con una gran flexibilidad.

Image by Michael Schwarzenberger from Pixabay

¿Te ha parecido de utilidad el contenido?

Daniel Rodríguez

Share
Published by
Daniel Rodríguez

Recent Posts

Data Lake y Data Warehouse: diferencias, usos y cómo se complementan en la era del dato

En la era del dato, las organizaciones se enfrentan al reto de gestionar volúmenes masivos…

2 días ago

Documentar tu API de Express con TypeScript usando OpenAPI (Swagger)

En la serie Creación de una API REST con Express y TypeScript construimos una API…

4 días ago

Curiosidad: El sesgo de supervivencia, o por qué prestar atención sólo a los que “llegaron” puede engañarte

Durante la Segunda Guerra Mundial, la Fuerza Aérea de Estados Unidos quería reforzar sus aviones…

1 semana ago

Cómo abrir una ventana de Chrome con tamaño y posición específicos desde la línea de comandos en Windows

En muchas situaciones —ya sea para grabar un tutorial, tomar capturas de pantalla profesionales, probar…

2 semanas ago

La Paradoja del Cumpleaños, o por qué no es tan raro compartir fecha de nacimiento

Imagínate en una sala con un grupo de personas, por ejemplo, en una oficina, un…

2 semanas ago

Programador de tareas de Windows: Guía definitiva para automatizar tu trabajo (BAT, PowerShell y Python)

En el trabajo diario con ordenadores, es común encontrarse con tareas repetitivas: realizar copias de…

3 semanas ago

This website uses cookies.