获得R中的所有组合,允许重复

时间:2015-07-18 14:11:44

标签: r combinations

内置combn只能提供一半的组合:

> t(combn(1:5, 2))
      [,1] [,2]
 [1,]    1    2
 [2,]    1    3
 [3,]    1    4
 [4,]    1    5
 [5,]    2    3
 [6,]    2    4
 [7,]    2    5
 [8,]    3    4
 [9,]    3    5
[10,]    4    5

例如,没有(1,1)也没有(2,1)。

我如何获得所有组合?

3 个答案:

答案 0 :(得分:7)

正如@akrun所说,看起来expand.grid会这样做。

> expand.grid(rep(list(1:5), 2))
   Var1 Var2
1     1    1
2     2    1
3     3    1
4     4    1
5     5    1
6     1    2
7     2    2
8     3    2
9     4    2
10    5    2
11    1    3
12    2    3
13    3    3
14    4    3
15    5    3
16    1    4
17    2    4
18    3    4
19    4    4
20    5    4
21    1    5
22    2    5
23    3    5
24    4    5
25    5    5

答案 1 :(得分:4)

您可以使用merge获取笛卡尔积:

merge(1:5, 1:5)

输出:

   x y
1  1 1
2  2 1
3  3 1
4  4 1
5  5 1
6  1 2
7  2 2
8  3 2
9  4 2
10 5 2
11 1 3
12 2 3
13 3 3
14 4 3
15 5 3
16 1 4
17 2 4
18 3 4
19 4 4
20 5 4
21 1 5
22 2 5
23 3 5
24 4 5
25 5 5

使用sqldf

df1 <- data.frame(a = 1:5)
df2 <- df1
sqldf("SELECT df1.a, df2.a FROM df1 
      CROSS JOIN df2")

答案 2 :(得分:1)

实际上,这被称为具有重复元素的排列。除了给定的建议,您还可以使用gtools::permutations功能:

gtools::permutations(5, 2, 1:5, repeats.allowed=TRUE)