2017-03-08 45 views
2

我想獲得所有可能的n個變量組合中的所有公共元素。假設我們有3個變量:a,b和c,每個變量有4個,2個和3個元素。我想創建一個數據框,其中包含列(a,b,c,ab,ac,bc和abc)中的所有可能組合以及第二列中的常用元素。例如:R獲得所有可能的N個變量組合的所有公共元素

輸入:

a<-c("x1","x2","x3","x4") 
b<-c("x2","x5") 
c<-c("x3","x4","x6") 

我會喜歡的輸出,看起來是這樣的:

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" 

到目前爲止,我嘗試這樣做:

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)) 

回答

4

很多方面,這裏的一個:

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) 

輸出:

 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