R - 如何计算对的组合?

tre*_*sch 0 r combinatorics

从许多项目(n),我如何计算R中所有可能的对组合?我可以计算可能的组合数量(n-1)*(n-3)*(n-5)*…,但如何自己获得组合?

例如,我有

x <- c("A", "B", "C", "D") 
Run Code Online (Sandbox Code Playgroud)

这会产生4-1=3对的组合,所以我希望有类似的东西

("AB","CD")
("AC","BD")
("AD","BC")
Run Code Online (Sandbox Code Playgroud)

非常感谢!

eip*_*i10 5

首先,让我们得到所有成对的对:

dat = t(combn(combn(x, 2, paste, collapse=""), 2))
Run Code Online (Sandbox Code Playgroud)
     [,1] [,2]
 [1,] "AB" "AC"
 [2,] "AB" "AD"
 [3,] "AB" "BC"
 [4,] "AB" "BD"
 [5,] "AB" "CD"
 [6,] "AC" "AD"
 [7,] "AC" "BC"
 [8,] "AC" "BD"
 [9,] "AC" "CD"
[10,] "AD" "BC"
[11,] "AD" "BD"
[12,] "AD" "CD"
[13,] "BC" "BD"
[14,] "BC" "CD"
[15,] "BD" "CD"
Run Code Online (Sandbox Code Playgroud)

我们现在拥有所有成对的对.但看起来你只想要成对的对,每个字母只出现一次.下面的代码标识满足此条件的行(尽管看起来代码比它需要的更复杂).

dat[sapply(strsplit(apply(dat, 1, paste, collapse=""), ""), function(i) length(unique(i)) == 4), ]
Run Code Online (Sandbox Code Playgroud)
     [,1] [,2]
[1,] "AB" "CD"
[2,] "AC" "BD"
[3,] "AD" "BC"
Run Code Online (Sandbox Code Playgroud)