我四处寻找解决方案,但找不到确切的解决方案。
给定:
a<-c('a','b','c')
b<-c('d','e','f')
d<-c('g','h')
作为一个更大集合的玩具子集,我希望能够在之间找到唯一的对 属性(向量)集。如果我使用
combn(c(a,b,d),2)
它将返回所有属性元素的所有成对组合。 例如
combn(c(a,b,d),2)
返回c(a,b) c(a,d) c(a,d) c(a,e)...
但我只想要属性之间的元素对。所以我不会看到 a,b 或 a,c 但是 a,d a,e a,f b,d b,e,b,f 等...
我可以用expand.grid(a,b,d)来做到这一点..
Var1 Var2 Var3
1 a d g
2 b d g
3 c d g
4 a e g
5 b e g
6 c e g
7 a f g
8 b f g
9 c f g
10 a d h
11 b d h
12 c d h
13 a e h
14 b e h
15 c e h
16 a f h
17 b f h
18 c f h
但现在我有一个 n 列维度的组合集。有什么办法限制吗 它只是属性元素对,例如combn(x,2)
主要目标是找到所有属性对之间唯一的元素成对组合的列表,但我不想要元素的组合 在同一属性列中,因为它在我的应用程序中是多余的。
最佳答案
采用网格中每一行中的对的组合,然后过滤以获得唯一的条目,我们有这样的:
unique(do.call(c, apply(expand.grid(a,b,d), 1, combn, m=2, simplify=FALSE)))
返回组合列表:
> L <- unique(do.call(c, apply(expand.grid(a,b,d), 1, combn, m=2, simplify=FALSE)))[1:5]
> length(L) ## 21
> L
## [[1]]
## Var1 Var2
## "a" "d"
##
## [[2]]
## Var1 Var3
## "a" "g"
##
## [[3]]
## Var2 Var3
## "d" "g"
##
## [[4]]
## Var1 Var2
## "b" "d"
##
## [[5]]
## Var1 Var3
## "b" "g"
关于r - 查找属性变量的组合对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16727084/