Ordene las filas de DataFrame según el vector con un orden específico en R

En este artículo, veremos cómo ordenar filas de marcos de datos según los valores de un vector con un orden específico. Hay dos funciones mediante las cuales podemos ordenar filas de marcos de datos en función de los valores de un vector. 

  • función de coincidencia()
  • función izquierda_join()

Conjunto de datos de ejemplo:

data <- data.frame(x1 = 1:5,               
                  x2 = letters[1:5],
                  x3 = 6:10)
                                                     
data
  x1 x2 x3
1  1  a  6
2  2  b  7
3  3  c  8
4  4  d  9
5  5  e 10

Vector con orden específico:

vec <- c("b", "e", "a", "c", "d")               
vec                                           
# "b" "e" "a" "c" "d"

Método 1: Uso de la función match() para ordenar el marco de datos según el vector.

Match devuelve un vector de las posiciones de las (primeras) coincidencias de su primer argumento en su segundo.

Sintaxis: match(x, table, nomatch = NA_integer_, incomparables = NULL)

Parámetros:

  • X: Vector o NULL: los valores a combinar. Se admiten vectores largos.
  • tabla: vector o NULL: los valores que se compararán. Los vectores largos no son compatibles.
  • nomatch: el valor que se devolverá en caso de que no se encuentre ninguna coincidencia. Tenga en cuenta que está forzado a entero.
  • incomparables: Un vector de valores que no se pueden igualar. A cualquier valor en x que coincida con un valor en este vector se le asigna el valor de no coincidencia. Por razones históricas, FALSE es equivalente a NULL.

Código:

R

data <- data.frame(x1 = 1:5,               
                   x2 = letters[1:5],
                   x3 = 6:10)
vec <- c("b", "e", "a", "c", "d") 
  
new_dataset <- data[match(vec, data$x2), ]       
new_dataset                                      

Producción:

  x1 x2 x3
2  2  b  7
5  5  e 10
1  1  a  6
3  3  c  8
4  4  d  9

Como podemos ver en el resultado anterior, el nuevo marco de datos se ordena en función de los valores del vector.

Método 2: Uso de la función left_join() del paquete dplyr:

Primero, tenemos que instalar y cargar el paquete dplyr: ahora podemos usar el método left_join() para ordenar el marco de datos según los valores del vector.

Sintaxis: left_join(x, y, by = NULL, copy = FALSE, sufijo = c(“.x”, “.y”), …)

Parámetros:

  • x, y: tbls para unirse
  • by: un vector de caracteres de variables para unirse. Si es NULL, el valor predeterminado, *_join() hará una unión natural, utilizando todas las variables con nombres comunes en las dos tablas. Un mensaje enumera las variables para que pueda verificar que sean correctas (para suprimir el mensaje, simplemente enumere explícitamente las variables que desea unir).
  • copiar: si x e y no son de la misma fuente de datos, y la copia es VERDADERA, entonces y se copiará en el mismo src que x. Esto le permite unir tablas a través de srcs, pero es una operación potencialmente costosa, por lo que debe optar por ella.
  • sufijo: si hay variables duplicadas no unidas en x e y, estos sufijos se agregarán a la salida para eliminar la ambigüedad. Debe ser un vector de caracteres de longitud 2.

Código:

R

install.packages("dplyr")                  
library("dplyr")
data <- data.frame(x1 = 1:5,               
                   x2 = letters[ 1 : 5] ,
                   x3 = 6:10)
  
vec <- c("b", "e", "a", "c", "d")  
  
new_dataset <- left_join(data.frame(x2 = vec),  
                     data,
                     by = "x2")
print(new_dataset)                                      

Producción:

 x2 x1 x3
1  b  2  7
2  e  5 10
3  a  1  6
4  c  3  8
5  d  4  9

Publicación traducida automáticamente

Artículo escrito por KapilChhipa y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *