# Find Unique Combinations of All Elements from Two Vectors in R

The number of possible combinations of two vectors can be computed by multiplying all the successive elements of the first vector with the corresponding elements of the second vector. In case, the two vectors have unique elements, the resultant table or data frame formed has m * n elements, where m is the length of the first vector and n is the length of the second vector, respectively. R programming language provides us in-built method as well as external packages to find out the possible pairs easily.

**Method1 : Using ****expand.grid()**** method **

expand.grid() in R can be used to generate a data frame where the rows are all possible unique combinations formed on taking elements from the argument vectors. More than 2 argument vectors can also be specified. The columns can be assigned customized names, otherwise, the row names are automatic. The number of rows in the data frame is equivalent to the total plausible combinations.

**Syntax:**

expand.grid(vec1…n)

**Example:**

## 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)` |

**Output**

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

**Method 2: Using tidyr package**

The “tidyr” package in the R language can be installed and loaded into the working directory. The crossing() method of this package is used to create a coss joining of the input vectors to generate all the plausible combinations. The names can also be supplied by using named argument listing during function call. The order of appearance of elements in the vector is retained.

**Syntax:**

crossing(vec1…n)

**Example:**

## 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)` |

**Output**

# 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

**Method 3: Using data.table package**

The data.table library can be installed and loaded into the working space. CJ method which refers to (C)ross (J)oin of this package can be used to create a data.table formed from the cross product of the vectors. Multiple argument vectors can be supplied to this method. The output is returned to the form of a data.table using this approach.

Syntax:CJ(vec1..n, sorted = TRUE, unique = FALSE)

Parameter :

vec1.. n :input argument vectorssorted :indicator of whether the order of input vectors is to be retained or not.unique :indicator of whether only the unique values of the result should be displayed

**Example:**

## 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` `)` |

**Output:**

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