【问题标题】:How generate all posible combinations of a vector without repetition in R?如何在R中生成向量的所有可能组合而不重复?
【发布时间】:2017-11-03 20:14:53
【问题描述】:

也许是一个简单的问题,如何生成向量的组合。我有下一个向量。

> x<-1:5
> x
[1] 1 2 3 4 5

所以我想要的是所有它们的组合,但序列中不能包含相同的数字和ab==baabc==bca==cab,即:

permut<-c(1:5,12,13,14,15,23,24,25,34,...,123,124,125,134,135,...,1234,1235,...)
permut
[1] 1 2 3 4 5 12 13 14 15 23 24 25 34 ... 123 124 125 134 135 ... 1234 1235

我觉得expand.grid()这个函数很有用,但我不知道具体怎么用。

【问题讨论】:

    标签: r combinations


    【解决方案1】:

    这是combn 的解决方案(感谢@Joseph Wood 让我的回答更简单):

    as.numeric(unlist(sapply(vec, function(y) combn(vec, y, paste, collapse = ""))))
    

    结果:

     [1]     1     2     3     4     5    12    13    14    15    23    24    25    34    35
    [15]    45   123   124   125   134   135   145   234   235   245   345  1234  1235  1245
    [29]  1345  2345 12345
    

    你也可以把它变成一个函数:

    all_combn = function(vec){
      as.numeric(unlist(sapply(vec, function(y) combn(vec, y, paste, collapse = ""))))
    }
    

    结果:

    > all_combn(1:5)
     [1]     1     2     3     4     5    12    13    14    15    23    24    25    34    35
    [15]    45   123   124   125   134   135   145   234   235   245   345  1234  1235  1245
    [29]  1345  2345 12345
    
    > all_combn(1:6)
     [1]      1      2      3      4      5      6     12     13     14     15     16     23
    [13]     24     25     26     34     35     36     45     46     56    123    124    125
    [25]    126    134    135    136    145    146    156    234    235    236    245    246
    [37]    256    345    346    356    456   1234   1235   1236   1245   1246   1256   1345
    [49]   1346   1356   1456   2345   2346   2356   2456   3456  12345  12346  12356  12456
    [61]  13456  23456 123456
    

    【讨论】:

    • 您可以将函数直接传递给combn...不需要data.frameas.numeric(unlist(sapply(vec, function(y) combn(vec,y,paste,collapse = ""))))还是很不错!!
    • @JosephWood 哦!我没有意识到combn 可以采用一个函数来应用于每个组合。谢谢,我已将其更新为我的答案:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-19
    • 1970-01-01
    • 1970-01-01
    • 2021-12-15
    相关资源
    最近更新 更多