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