我有值池,我想通过从某些池中挑选来生成所有可能的无序组合.
例如,我想从池0,池0和池1中选择:
>>> pools = [[1, 2, 3], [2, 3, 4], [3, 4, 5]]
>>> part = (0, 0, 1)
>>> list(product(*(pools[i] for i in part)))
[(1, 1, 2), (1, 1, 3), (1, 1, 4), (1, 2, 2), (1, 2, 3), (1, 2, 4), (1, 3, 2), (1, 3, 3), (1, 3, 4), (2, 1, 2), (2, 1, 3), (2, 1, 4), (2, 2, 2), (2, 2, 3), (2, 2, 4), (2, 3, 2), (2, 3, 3), (2, 3, 4), …Run Code Online (Sandbox Code Playgroud) 在数据框中,我有一列包含字符串.让我们说它看起来像这样:
x <- unique(df[,1])
x
"A" "A" "B" "B" "B" "C"
Run Code Online (Sandbox Code Playgroud)
我想把所有可能的独特字符串组合作为2组而不关心他们的顺序,所以A, B是相同的B, A,我不想得到与组合相同的值A, A.到目前为止,我到目前为止:
comb <- expand.grid(x, x)
comb <- comb[which(comb[,1] != comb[,2]),]
Run Code Online (Sandbox Code Playgroud)
但是这仍然存在以不同顺序具有相同字符串组合的行的问题.我怎么摆脱这个?
我需要一个类似于expand.grid但没有重复元素组合的函数。
这是我的问题的简化版本。
X1 = c("x","y","z")
X2 = c("A","B","C")
X3 = c("y","C","G")
d <- expand.grid(X1,X2,X3)
d
Var1 Var2 Var3
1 x A y
2 y A y
3 z A y
4 x B y
. . . .
. . . .
. . . .
23 y B G
24 z B G
25 x C G
26 y C G
27 z C G
Run Code Online (Sandbox Code Playgroud)
d有 27 行。但其中 6 个包含我不需要的重复值行:2、5、8、16、17 和 18
有没有办法获取不包含任何重复项的其他 21 行。
请注意,向量的元素数量超过 …