Encuentre combinaciones únicas de todos los elementos de dos vectores en R

El número de combinaciones posibles de dos vectores se puede calcular multiplicando todos los elementos sucesivos del primer vector con los elementos correspondientes del segundo vector. En caso de que los dos vectores tengan elementos únicos, la tabla resultante o el marco de datos formado tiene m * n elementos, donde m es la longitud del primer vector y n es la longitud del segundo vector, respectivamente. El lenguaje de programación R nos proporciona un método incorporado, así como paquetes externos para encontrar fácilmente los posibles pares. 

Método 1: Usar el método  expand.grid()

expand.grid() en R se puede usar para generar un marco de datos donde las filas son todas las posibles combinaciones únicas formadas al tomar elementos de los vectores de argumento. También se pueden especificar más de 2 vectores de argumento. Las columnas se pueden asignar nombres personalizados, de lo contrario, los nombres de las filas son automáticos. El número de filas en el marco de datos es equivalente al total de combinaciones plausibles. 

Sintaxis:

expandir.grid(vec1…n)

Ejemplo:

R

# declaring first integer vector
vec1 <- c(1:3)
 
# declaring second string vector
vec2 <- c("GeeksForGeeks","CSE")
 
# creating a data frame of vector1 and vector2 combinations
expand.grid("col1"= vec1,"col2" = vec2)

Producción

  col1          col2
1    1 GeeksForGeeks
2    2 GeeksForGeeks
3    3 GeeksForGeeks
4    1           CSE
5    2           CSE
6    3           CSE

Método 2: Usar el paquete tidyr

El paquete «tidyr» en lenguaje R se puede instalar y cargar en el directorio de trabajo. El método crossing() de este paquete se usa para crear una combinación cruzada de los vectores de entrada para generar todas las combinaciones plausibles. Los nombres también se pueden proporcionar mediante el uso de una lista de argumentos con nombre durante la llamada a la función. Se conserva el orden de aparición de los elementos en el vector. 

Sintaxis:

cruce(vec1…n)

Ejemplo:

R

library("tidyr")
 
# declaring first integer vector
vec1 <- letters[1:4]
 
# declaring second string vector
vec2 <- c(8:10)
 
# creating a data frame of vector1
# and vector2 combinations
crossing(vec1,vec2)

Producción

# A tibble: 
12 x 2    
vec1   vec2    
<chr> <int>  
1 a         8  
2 a         9  
3 a        10  
4 b         8  
5 b         9  
6 b        10  
7 c         8  
8 c         9  
9 c        10
10 d         8 
11 d         9 
12 d        10

Método 3: Usar el paquete data.table

La biblioteca data.table se puede instalar y cargar en el espacio de trabajo. El método CJ que se refiere a (C)ross (J)oin de este paquete se puede usar para crear una tabla de datos formada a partir del producto cruzado de los vectores. Se pueden suministrar varios vectores de argumentos a este método. La salida se devuelve a la forma de una tabla de datos utilizando este enfoque. 

Sintaxis: CJ(vec1..n, ordenado = VERDADERO, único = FALSO)  

Parámetro: 

  • vec1.. n : vectores de argumentos de entrada 
  • sorted : indicador de si el orden de los vectores de entrada debe conservarse o no. 
  • único : indicador de si solo se deben mostrar los valores únicos del resultado

Ejemplo:

R

library("data.table")
 
# declaring first character vector
vec1 <- letters[1:4]
 
# declaring second integer vector
vec2 <- c(8:10)
 
# declaring third integer vector
vec3 <- c(1:2)
 
# creating a data frame of vector1
# and vector2 combinations
CJ(vec1, vec2, vec3, unique = TRUE)

Producción:

    vec1 vec2 vec3
1:    a    8    1
2:    a    8    2
3:    a    9    1
4:    a    9    2
5:    a   10    1
6:    a   10    2
7:    b    8    1
8:    b    8    2
9:    b    9    1
10:    b    9    2
11:    b   10    1
12:    b   10    2
13:    c    8    1
14:    c    8    2
15:    c    9    1
16:    c    9    2
17:    c   10    1
18:    c   10    2
19:    d    8    1
20:    d    8    2
21:    d    9    1
22:    d    9    2
23:    d   10    1
24:    d   10    2

Publicación traducida automáticamente

Artículo escrito por yashkumar0457 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 *