首页 > 解决方案 > 不同长度的向量元素的所有组合,条件是每个向量只选择一个元素而忽略顺序?

问题描述

假设我们有三个向量:

v_1 = c("a", "b", "c", "d")
v_2 = c("e", "f", "g")
v_3 = c("h", "i")

我想使用 R 在以下条件下检索所有可能长度的这三个向量的所有组合的完整列表:

鉴于我已经正确完成了数学运算,我们最终应该得到 59 种不同的长度为 1 到 3 的组合。我研究了这个combn()函数,但应用这两个条件似乎很困难(或不可能?)。有没有人有关于如何在 R 中解决这个问题的建议?

谢谢!

标签: r

解决方案


我认为您的一般方法是合理的,但可以通过将向量列表直接传递给combn()expand.grid()在其函数参数中使用来简化。然后您需要做的就是将输出绑定到数据框中。

v_1 = c("a", " b", "c", "d")
v_2 = c("e", "f", "g")
v_3 = c("h", "i")

library(purrr)
library(dplyr)

my_list <- list(v_1, v_2, v_3)

map(seq_along(my_list), ~combn(my_list, .x, FUN = function(x) list(expand.grid(x, stringsAsFactors = FALSE)))) %>%
  map_df(bind_rows)

   Var1 Var2 Var3
1     a <NA> <NA>
2     b <NA> <NA>
3     c <NA> <NA>
4     d <NA> <NA>
5     e <NA> <NA>
6     f <NA> <NA>
7     g <NA> <NA>
8     h <NA> <NA>
9     i <NA> <NA>
10    a    e <NA>
...
58    c    g    i
59    d    g    i

推荐阅读