我有一个简单的案例,可以用丑陋的方式解决,但我确信必须存在更聪明(更快)的方式。
让我们取这个向量
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)
}
我确信必须有一种更聪明的方法。
答案 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>