首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R得到N个变量的所有可能组合的所有公共元素

R得到N个变量的所有可能组合的所有公共元素
EN

Stack Overflow用户
提问于 2017-03-08 08:59:58
回答 1查看 96关注 0票数 2

我想得到n个变量的所有可能组合中的所有公共元素。

假设我们有3个变量: a、b和c,每个变量有4、2和3个元素。我想在一个列(a,b,c,ab,ac,bc和abc)和第二列中的公共元素中创建一个包含所有可能组合的数据框架。示例:

投入:

代码语言:javascript
复制
a<-c("x1","x2","x3","x4")
b<-c("x2","x5")
c<-c("x3","x4","x6")

我希望输出的内容类似于:

代码语言:javascript
复制
   name       elements
1    a       "x1","x2","x3","x4"
2    b       "x2","x3","x5"
3    c       "x3","x4","x6"
4   ab       "x1","x2","x3","x4","x5"
5   ac       "x1","x2","x3","x4","x6"
6   bc       "x2","x3","x4","x5","x6"
7   abc      "x1","x2","x3","x4","x5","x6" 

到目前为止,我尝试过这个:

代码语言:javascript
复制
all1<-c("a","b","c")
all2<-list(a,b,c)
all3<-c(a,b,c)

sapply (  1:3, function(x) combn(all1,x))
sapply (  1:3, function(x) combn(all2,x))
sapply (  1:3, function(x) combn(all3,x))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-08 09:14:56

有很多种方法,这里有一个:

代码语言:javascript
复制
grid <- expand.grid(a=c(T,F), b=c(T,F), c=c(T,F))
grid$results <- mapply(function(x,y,z) {
    unique(c(if(x) a,if(y) b,if(z) c))
},grid$a,grid$b,grid$c)

输出:

代码语言:javascript
复制
      a     b     c                results
1  TRUE  TRUE  TRUE x1, x2, x3, x4, x5, x6
2 FALSE  TRUE  TRUE     x2, x5, x3, x4, x6
3  TRUE FALSE  TRUE     x1, x2, x3, x4, x6
4 FALSE FALSE  TRUE             x3, x4, x6
5  TRUE  TRUE FALSE     x1, x2, x3, x4, x5
6 FALSE  TRUE FALSE                 x2, x5
7  TRUE FALSE FALSE         x1, x2, x3, x4
8 FALSE FALSE FALSE                   NULL
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42666933

复制
相关文章

相似问题

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