R:如何获得2个向量的唯一成对组合
x = 1:3
y = 1:3
> expand.grid(x = 1:3, y = 1:3)
x y
1 1 1
2 2 1
3 3 1
4 1 2
5 2 2
6 3 2
7 1 3
8 2 3
9 3 3
使用expand.grid
给了我所有的组合。但是,我只想要成对比较,也就是说,我不想要 1 对 1、2 对、2 或 3 对 3 的比较。此外,我只想保留唯一的对,即我想保留1 对 2(而不是 2 对 1)。
总之,对于上述x
和y
,我想要以下 3 对组合:
x y
1 1 2
2 1 3
3 2 3
同样,对于x = y = 1:4
,我想要以下成对组合:
x y
1 1 2
2 1 3
3 1 4
4 2 3
5 2 4
6 3 4
回答
我们可以用 combn
f1 <- function(x) setNames(as.data.frame(t(combn(x, 2))), c("x", "y"))
f1(1:3)
# x y
#1 1 2
#2 1 3
#3 2 3
f1(1:4)
# x y
#1 1 2
#2 1 3
#3 1 4
#4 2 3
#5 2 4
#6 3 4