首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何计算成对的组合?

如何计算成对的组合?
EN

Stack Overflow用户
提问于 2017-12-07 18:26:41
回答 2查看 2.8K关注 0票数 1

从许多项(n)中,如何计算R中所有可能的对组合?我可以用(n-1)*(n-3)*(n-5)*…计算出可能的组合数,但是如何获得组合本身?

例如,我有

代码语言:javascript
复制
x <- c("A", "B", "C", "D") 

这将使4-1=3组合成对,所以我希望有这样的东西

代码语言:javascript
复制
("AB","CD")
("AC","BD")
("AD","BC")

非常感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-12-07 18:33:46

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

代码语言:javascript
复制
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"

现在我们有了所有的对。但看起来你只想要一对,其中每个字母只出现一次。下面的代码标识了符合这个条件的行(尽管看起来代码比它所需要的要复杂)。

代码语言:javascript
复制
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"

票数 5
EN

Stack Overflow用户

发布于 2017-12-07 18:31:16

为此,可以使用combnexpand.grid

代码语言:javascript
复制
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" 
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47701482

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档