pla*_*ous 2 r dplyr data.table
我想知道解决以下问题的有效方法是什么:
假设我在组 1 中有 3 个字符,在组 2 中有两个字符:
group_1 = c("X", "Y", "Z")
group_2 = c("A", "B")
Run Code Online (Sandbox Code Playgroud)
显然,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))
Run Code Online (Sandbox Code Playgroud)
我的问题如下:
(1)如何有效地从 到group_1(group_1_combs假设字符向量可能很大)。
(2) 如何对group_1_combs和的每一行进行“所有可能”的组合group_2_combs?具体来说,我想要一个“最终” data.frame,其中 的每一行都group_1_combs与 的每一行“排列” group_2_combs。这意味着最终的 data.frame 将具有 8 x 4 行(因为 中有 8 行group_1_combs和 4 行group_2_combs)和 5 列(X,Y,Z,A,B)。
谢谢!
你想要expand.grid并且merge:
问题一:
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))
Run Code Online (Sandbox Code Playgroud)
问题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
...
Run Code Online (Sandbox Code Playgroud)
或者你可以直接进入合并后的data.frame:
group_12 <- c(group_1, group_2)
expand.grid(setNames(rep(list(c(0, 1)), length(group_12)), group_12))
Run Code Online (Sandbox Code Playgroud)