多个向量的可能组合列表

Loh*_*rin 3 combinations r

我正在尝试为以下数据生成所有可能的组合(长度为 3)。诀窍是 - 我们不希望来自同一阶段的变量在一起。例如:从 Stage1 选择 1 个变量,从 Stage2 选择一个变量,从 Stage 3 选择一个变量,或者从 Stage 1 选择一个变量,从 Stage 4 选择一个变量,从 Stage 5 选择一个变量。我试图使用“combn”功能 - 但似乎不行,我已经开始使用 Expand.grid 但不确定下一步

我的下面的代码:

Stage1<-paste0("VarStage1_", seq(1:6))
Stage2<-paste0("VarStage2_", seq(1:8))
Stage3<-paste0("VarStage3_", seq(1:3))
Stage4<-paste0("VarStage4_", seq(1:4))
Stage5<-paste0("VarStage5_", seq(1:6))

new<-combn(c(Stage1, Stage2, Stage3, Stage4, Stage5, Stage5), 3)
head(t(new)) # not ok, 3 variables from Stage 1 (VarStage1_1,VarStage1_2,VarStage1_3)

my.combinations<-expand.grid(Stage1, Stage2, Stage3) # I can manually add all combinations here eg.: Stage1, Stage2, Stage5
head(my.combinations)
Run Code Online (Sandbox Code Playgroud)

Rui*_*das 5

您在寻找这样的东西吗?
将向量放入列表中,apply expand.grid为每个子列表创建组合索引 和 。

Stage1<-paste0("VarStage1_", seq(1:6))
Stage2<-paste0("VarStage2_", seq(1:8))
Stage3<-paste0("VarStage3_", seq(1:3))
Stage4<-paste0("VarStage4_", seq(1:4))
Stage5<-paste0("VarStage5_", seq(1:6))

vec_list <- list(Stage1, Stage2, Stage3, Stage4, Stage5, Stage5)
inx <- combn(length(vec_list), 3)
result <- apply(inx, 2, \(i) expand.grid(vec_list[i]))
lapply(result, head, n = 6)
#> [[1]]
#>          Var1        Var2        Var3
#> 1 VarStage1_1 VarStage2_1 VarStage3_1
#> 2 VarStage1_2 VarStage2_1 VarStage3_1
#> 3 VarStage1_3 VarStage2_1 VarStage3_1
#> 4 VarStage1_4 VarStage2_1 VarStage3_1
#> 5 VarStage1_5 VarStage2_1 VarStage3_1
#> 6 VarStage1_6 VarStage2_1 VarStage3_1
#> 
#> [[2]]
#>          Var1        Var2        Var3
#> 1 VarStage1_1 VarStage2_1 VarStage4_1
#> 2 VarStage1_2 VarStage2_1 VarStage4_1
#> 3 VarStage1_3 VarStage2_1 VarStage4_1
#> 4 VarStage1_4 VarStage2_1 VarStage4_1
#> 5 VarStage1_5 VarStage2_1 VarStage4_1
#> 6 VarStage1_6 VarStage2_1 VarStage4_1
#> 
#> [[3]]
#>          Var1        Var2        Var3
#> 1 VarStage1_1 VarStage2_1 VarStage5_1
#> 2 VarStage1_2 VarStage2_1 VarStage5_1
#> 3 VarStage1_3 VarStage2_1 VarStage5_1
#> 4 VarStage1_4 VarStage2_1 VarStage5_1
#> 5 VarStage1_5 VarStage2_1 VarStage5_1
#> 6 VarStage1_6 VarStage2_1 VarStage5_1
#> 
#> [[4]]
#>          Var1        Var2        Var3
#> 1 VarStage1_1 VarStage3_1 VarStage4_1
#> 2 VarStage1_2 VarStage3_1 VarStage4_1
#> 3 VarStage1_3 VarStage3_1 VarStage4_1
#> 4 VarStage1_4 VarStage3_1 VarStage4_1
#> 5 VarStage1_5 VarStage3_1 VarStage4_1
#> 6 VarStage1_6 VarStage3_1 VarStage4_1
#> 
#> [[5]]
#>          Var1        Var2        Var3
#> 1 VarStage1_1 VarStage3_1 VarStage5_1
#> 2 VarStage1_2 VarStage3_1 VarStage5_1
#> 3 VarStage1_3 VarStage3_1 VarStage5_1
#> 4 VarStage1_4 VarStage3_1 VarStage5_1
#> 5 VarStage1_5 VarStage3_1 VarStage5_1
#> 6 VarStage1_6 VarStage3_1 VarStage5_1
#> 
#> [[6]]
#>          Var1        Var2        Var3
#> 1 VarStage1_1 VarStage4_1 VarStage5_1
#> 2 VarStage1_2 VarStage4_1 VarStage5_1
#> 3 VarStage1_3 VarStage4_1 VarStage5_1
#> 4 VarStage1_4 VarStage4_1 VarStage5_1
#> 5 VarStage1_5 VarStage4_1 VarStage5_1
#> 6 VarStage1_6 VarStage4_1 VarStage5_1
#> 
#> [[7]]
#>          Var1        Var2        Var3
#> 1 VarStage2_1 VarStage3_1 VarStage4_1
#> 2 VarStage2_2 VarStage3_1 VarStage4_1
#> 3 VarStage2_3 VarStage3_1 VarStage4_1
#> 4 VarStage2_4 VarStage3_1 VarStage4_1
#> 5 VarStage2_5 VarStage3_1 VarStage4_1
#> 6 VarStage2_6 VarStage3_1 VarStage4_1
#> 
#> [[8]]
#>          Var1        Var2        Var3
#> 1 VarStage2_1 VarStage3_1 VarStage5_1
#> 2 VarStage2_2 VarStage3_1 VarStage5_1
#> 3 VarStage2_3 VarStage3_1 VarStage5_1
#> 4 VarStage2_4 VarStage3_1 VarStage5_1
#> 5 VarStage2_5 VarStage3_1 VarStage5_1
#> 6 VarStage2_6 VarStage3_1 VarStage5_1
#> 
#> [[9]]
#>          Var1        Var2        Var3
#> 1 VarStage2_1 VarStage4_1 VarStage5_1
#> 2 VarStage2_2 VarStage4_1 VarStage5_1
#> 3 VarStage2_3 VarStage4_1 VarStage5_1
#> 4 VarStage2_4 VarStage4_1 VarStage5_1
#> 5 VarStage2_5 VarStage4_1 VarStage5_1
#> 6 VarStage2_6 VarStage4_1 VarStage5_1
#> 
#> [[10]]
#>          Var1        Var2        Var3
#> 1 VarStage3_1 VarStage4_1 VarStage5_1
#> 2 VarStage3_2 VarStage4_1 VarStage5_1
#> 3 VarStage3_3 VarStage4_1 VarStage5_1
#> 4 VarStage3_1 VarStage4_2 VarStage5_1
#> 5 VarStage3_2 VarStage4_2 VarStage5_1
#> 6 VarStage3_3 VarStage4_2 VarStage5_1
Run Code Online (Sandbox Code Playgroud)

创建于 2023-02-10,使用reprex v2.0.2


编辑

就像艾伦·卡梅伦的评论所说,将所有结果放在一个 data.frame 中,

result <- do.call(rbind, result)
Run Code Online (Sandbox Code Playgroud)

  • 我发布了一半相同的答案!除了对结果执行“do.call(rbind, .)”以获得单个数据帧之外。 (3认同)