【问题标题】:How to generate all possible combinations of vectors without caring for order?如何在不关心顺序的情况下生成所有可能的向量组合?
【发布时间】:2012-09-03 09:30:05
【问题描述】:

在数据框中,我有一列包含字符串。假设它看起来像这样:

x <- unique(df[,1])
x
"A" "A" "B" "B" "B" "C"

我想获得唯一字符串的所有可能组合作为 2 组而不关心它们的顺序,所以 A, BB, A 相同,我不想得到相同的值像A, A 这样的组合。到目前为止,我得到了这一点:

comb <- expand.grid(x, x)
comb <- comb[which(comb[,1] != comb[,2]),]

但这仍然会导致具有相同字符串组合的行以不同的顺序排列的问题。我该如何摆脱它?

【问题讨论】:

  • x 不能可能是你所展示的;如果您将unique() 应用于df[,1],它们将是独一无二的,不是吗?
  • 你说得对,我把它和打印数据框列本身的内容混在一起了。 x 当然不包含重复项。

标签: r


【解决方案1】:

combn 包中有 combn 函数:

t(combn(LETTERS[1:3],2))
#      [,1] [,2]
# [1,] "A"  "B" 
# [2,] "A"  "C" 
# [3,] "B"  "C"

我有点困惑为什么你的x 有重复的值。

【讨论】:

    【解决方案2】:

    我想你在找combn:

    x <- c("A", "A", "B", "B", "B", "C")
    combn(x,2)
    

    给予:

         [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15]
    [1,] "A"  "A"  "A"  "A"  "A"  "A"  "A"  "A"  "A"  "B"   "B"   "B"   "B"   "B"   "B"  
    [2,] "A"  "B"  "B"  "B"  "C"  "B"  "B"  "B"  "C"  "B"   "B"   "C"   "B"   "C"   "C"  
    

    如果您只想要 x 中的唯一值(如果这是 unique() 调用的结果,我不知道为什么您首先在 x 中有重复值):

    > combn(unique(x),2)
         [,1] [,2] [,3]
    [1,] "A"  "A"  "B" 
    [2,] "B"  "C"  "C" 
    

    【讨论】:

    • 谢谢,我不知道combn。我接受了 BenBarnes 的回答,因为它给出了我想要的输出,但显然你也回答了我的问题。
    猜你喜欢
    • 1970-01-01
    • 2019-11-01
    • 1970-01-01
    • 2022-11-22
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多