从许多项(n)中,如何计算R中所有可能的对组合?我可以用(n-1)*(n-3)*(n-5)*…计算出可能的组合数,但是如何获得组合本身?
例如,我有
x <- c("A", "B", "C", "D") 这将使4-1=3组合成对,所以我希望有这样的东西
("AB","CD")
("AC","BD")
("AD","BC")非常感谢!
发布于 2017-12-07 18:33:46
首先,让我们得到所有对对:
dat = t(combn(combn(x, 2, paste, collapse=""), 2))[,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), ][,1] [,2] [1,] "AB" "CD" [2,] "AC" "BD" [3,] "AD" "BC"
发布于 2017-12-07 18:31:16
为此,可以使用combn或expand.grid。
x <- c("A","B","C","D")
expand.grid(x, x) # generates both way combinations
Var1 Var2
1 A A
2 B A
3 C A
4 D A
5 A B
6 B B
7 C B
8 D B
9 A C
10 B C
11 C C
12 D C
13 A D
14 B D
15 C D
16 D D
t(combn(x, 2)) # order does not matter
[,1] [,2]
[1,] "A" "B"
[2,] "A" "C"
[3,] "A" "D"
[4,] "B" "C"
[5,] "B" "D"
[6,] "C" "D" https://stackoverflow.com/questions/47701482
复制相似问题