【问题标题】:Is there an expand.grid like function in R, returning permutations?R中是否有类似expand.grid的函数,返回排列?
【发布时间】:2010-05-21 15:09:15
【问题描述】:

为了更具体,这里有一个例子:

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

此数据框是根据提供的向量的所有组合创建的。我想从所有permutations 提供的向量中创建一个类似的数据框。请注意,每一行必须正好包含 2 个五,但不一定是第一个排成一行的两个。 谢谢。

【问题讨论】:

  • 我不明白这个问题,你能显示你希望输出的样子吗?排列通常作用于集合,而不是集合,所以我不确定该函数应该做什么。
  • @Ken Williams,再举一个例子,除了对 5,5,1,2 和 5,5,2,1 我还想在结果集中 5,1,5,2 - 5,2,5,1 - 5,1,2,5 - 5,2,1,5 - 1,5,2,5 - 2,5,1,5 - 1,5,5,2 - 2 ,5,5,1 - 1,2,5,5 和 2,1,5,5。如果我是正确的,结果数据框的维度应该是:[150,4]

标签: r permutation combinations


【解决方案1】:

下面的代码有效。 (依赖于 gtools 的排列)

comb <- t(as.matrix(expand.grid(5, 5, c(1:4,6),c(1:4,6))))
perms <- t(permutations(4,4))
ans <- apply(comb,2,function(x) x[perms])
ans <- unique(matrix(as.vector(ans), ncol = 4, byrow = TRUE))

【讨论】:

  • 太棒了!我觉得奇怪的是没有内置这样的功能
  • 为什么要内置?将它放在外部包中有什么问题?
【解决方案2】:

vegan 包中尝试?allPerms

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-21
    • 2015-07-17
    • 2012-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多