R:如何获得 2 个向量的唯一成对组合

R: how to obtain unique pairwise combinations of 2 vectors

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)。

综上所述,对于上述xy,我想要以下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

使用data.table,

library(data.table)

x <- 1:4
y <- 1:4

CJ(x, y)[x < y]
   x y
1: 1 2
2: 1 3
3: 1 4
4: 2 3
5: 2 4
6: 3 4

实际上你已经非常接近期望的输出了。您可能还需要 subset

> subset(expand.grid(x = x, y = y), x < y)
  x y
4 1 2
7 1 3
8 2 3

这是另一个选项,但代码更长

v <- letters[1:5] # dummy data vector
mat <- diag(length(v))
inds <- upper.tri(mat)
data.frame(
  x = v[row(mat)[inds]],
  y = v[col(mat)[inds]]
)

这给出了

   x y
1  a b
2  a c
3  b c
4  a d
5  b d
6  c d
7  a e
8  b e
9  c e
10 d e