R语言 寻找两个向量中所有元素的唯一组合
两个向量的可能组合的数量可以通过将第一个向量的所有连续元素与第二个向量的相应元素相乘来计算。如果两个向量有唯一的元素,形成的表或数据框有m*n
个元素,其中m是第一个向量的长度,n是第二个向量的长度,分别。R编程语言为我们提供了内置的方法和外部软件包,可以轻松地找出可能的配对。
方法1:使用expand.grid()方法
R语言中的expand.grid()可以用来生成一个数据框,其中的行是所有可能的唯一组合,从参数向量中提取元素形成。还可以指定两个以上的参数向量。列可以指定自定义的名称,否则,行的名称是自动的。数据框中的行数相当于所有可能的组合。
语法
expand.grid(vec1…n)
例子
# 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)
输出
col1 col2
1 1 GeeksForGeeks
2 2 GeeksForGeeks
3 3 GeeksForGeeks
4 1 CSE
5 2 CSE
6 3 CSE
方法2:使用tidyr包
R语言中的 “tidyr “包可以被安装并加载到工作目录中。这个包的crossing()方法被用来创建输入向量的交叉连接,以产生所有合理的组合。在函数调用过程中,也可以通过使用命名参数列表来提供名称。向量中元素的出现顺序被保留。
语法
crossing(vec1...n)
例子
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)
输出
# 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
方法3:使用data.table包
data.table库可以被安装并加载到工作空间。参考这个包的(C)ross (J)oin的CJ方法可以用来创建一个由向量的交叉积形成的data.table。多个参数向量可以提供给这个方法。使用这种方法,输出结果将以data.table的形式返回。
语法: CJ(vec1…n, sorted = TRUE, unique = FALSE)
参数:
- vec1…n: 输入参数向量
- sorted : 输入向量的顺序是否被保留的指标。
- unique : 是否只显示结果的唯一值的指标
例子
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)
输出
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