【问题标题】:All possible combinations (sequential)所有可能的组合(顺序)
【发布时间】:2021-12-12 03:16:48
【问题描述】:

我想知道以下问题的有效方法是什么:

假设我在第 1 组中有三个字符,在第 2 组中有两个字符:

group_1 = c("X", "Y", "Z")
group_2 = c("A", "B")

显然,group_1 和 group_2 的“所有”可能组合由下式给出:

group_1_combs = data.frame(X = c(0,1,0,0,1,1,0,1),
                           Y = c(0,0,1,0,1,0,1,1),
                           Z = c(0,0,0,1,0,1,1,1))
group_2_combs = data.frame(A = c(0,1,0,1),
                           B = c(0,0,1,1))

我的问题如下:

(1) 如何有效地从group_1 转到group_1_combs(假设字符向量可能很大)。

(2) 如何对group_1_combsgroup_2_combs 的每一行进行“所有可能的”组合?具体来说,我想要一个“最终”data.frame,其中group_1_combs 的每一行都与group_2_combs 的每一行“置换”。这意味着最终的 data.frame 将有 8 x 4 行(因为 group_1_combs 中有 8 行,group_2_combs 中有 4 行)和 5 列 (X,Y,Z,A,B)

谢谢!

【问题讨论】:

  • 由于您使用 data.table 标记,可能想尝试使用 CJ 的 jblood 答案的变体:group_1_combs <- do.call(CJ, setNames(rep(list(c(0, 1)), length(group_1)), group_1))

标签: r dplyr data.table


【解决方案1】:

你想要expand.gridmerge

问题一:

group_1_combs <- expand.grid(setNames(rep(list(c(0, 1)), length(group_1)), group_1))
group_2_combs <- expand.grid(setNames(rep(list(c(0, 1)), length(group_2)), group_2))

问题 2:

> merge(group_1_combs, group_2_combs)
   X Y Z A B
1  0 0 0 0 0
2  1 0 0 0 0
3  0 1 0 0 0
4  1 1 0 0 0
5  0 0 1 0 0
6  1 0 1 0 0
7  0 1 1 0 0
...

也可以直接进入合并后的data.frame:

group_12 <- c(group_1, group_2)
expand.grid(setNames(rep(list(c(0, 1)), length(group_12)), group_12))

【讨论】:

    猜你喜欢
    • 2021-06-05
    • 1970-01-01
    • 2014-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多