代码之家  ›  专栏  ›  技术社区  ›  WalliYo_

生成合并模式的所有可能组合

  •  1
  • WalliYo_  · 技术社区  · 1 年前

    我想得到一个分类变量的所有可能的组合,都存储在一个向量中。

    举个例子,让我们看看mtcars数据库的列(“gear”)。如果专用向量命名为“all_combi”,则结果应如下所示:

    > mtcars$gear
     [1] 4 4 4 3 3 3 3 4 4 4 4 3 3 3 3 3 3 4 4 4 3 3 3 3 3 4 5 5 5 5 5 4 6 
    all_combi
    [1] "3-4" "3-5" "4-5" "3-6" "3-4-6" "3-5-6" "3-6" "4-6" "5-6" "3-4-6" 
    

    我应该忘记all_combi向量中的一些组合,但我希望你能理解我的问题。。。
    谢谢你

    1 回复  |  直到 1 年前
        1
  •  2
  •   jblood94    1 年前
    x <- c(4, 4, 4, 3, 3, 3, 3, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 4, 4, 4, 
           3, 3, 3, 3, 3, 4, 5, 5, 5, 5, 5, 4, 6)
    u <- sort(unique(x))
    unlist(lapply(seq_along(u)[-1], \(m) combn(u, m, paste, collapse = "-")))
    #>  [1] "3-4"     "3-5"     "3-6"     "4-5"     "4-6"     "5-6"     "3-4-5"   "3-4-6"   "3-5-6"   "4-5-6"   "3-4-5-6"
    

    如评论中所述,如果速度是一个问题, RcppAlgos::comboGeneral combn Rfast::sort_unique(x) sort(unique(x))