从许多项目(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)
非常感谢!
首先,让我们得到所有成对的对:
dat = t(combn(combn(x, 2, paste, collapse=""), 2))
Run Code Online (Sandbox Code Playgroud)
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"
我们现在拥有所有成对的对.但看起来你只想要成对的对,每个字母只出现一次.下面的代码标识满足此条件的行(尽管看起来代码比它需要的更复杂).
dat[sapply(strsplit(apply(dat, 1, paste, collapse=""), ""), function(i) length(unique(i)) == 4), ]
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)[,1] [,2] [1,] "AB" "CD" [2,] "AC" "BD" [3,] "AD" "BC"