建立向量的所有组合-寻找更好的方法

时间:2018-11-01 21:10:29

标签: r

我有一个简单的案例,可以用丑陋的方式解决,但我确信必须存在更聪明(更快)的方式。

让我们取这个向量

d <- 1:6

我想以“前进”的方式列出所有可能的组合:

1 2
1 3
1 4
1 5
1 6
2 3
2 4
2 5
...
5 6

我首先可以使用的工作方式如下

n <- 6
combDF <- data.frame()
for( i in 1:(n-1)){

  thisVal <- rep(i,n-i)
  nextVal <- cumsum(rep(1,n-1)) +  1
  nextVal <- nextVal[nextVal > i]
  print("---")
  print(thisVal)
  print(nextVal[nextVal > i])
 df <- data.frame(thisVal = thisVal, nextVal = nextVal)
 combDF <- rbind(combDF, df)
}

我确信必须有一种更聪明的方法。

2 个答案:

答案 0 :(得分:2)

大声调试?我就是这样找到的

as.data.frame(t(combn(d,m=2)))

  V1 V2
1   1  2
2   1  3
3   1  4
4   1  5
5   1  6
6   2  3
7   2  4
8   2  5
9   2  6
10  3  4
11  3  5
12  3  6
13  4  5
14  4  6
15  5  6

答案 1 :(得分:1)

使用expand.grid和子集的一种方法:

d <- 1:6

foo <- expand.grid(a = d, b = d)
foo[foo[, "a"] > foo[, "b"], c("b", "a")]

如果向量和内存受限,这可能不是解决问题的最佳方法,因为expand.grid调用会生成很多被删除的项目,但是它可读性很强,并且可以清楚地传达意图。 / p>