循环遍历R中不同的变量组合

时间:2017-06-01 09:46:28

标签: r

我有8个变量; 1到8,我想循环遍历变量的所有组合并将它们写入表中。但我不想要双打:(1,2 == 2,1)。这是几个选项。

              variables
   Option 1:   1, 2            
   Option 2:   1, 3
   Option 3:   1, 4 
   .....
   Option 8:   1, 8 
   Option 9:   1, 2, 3
   Option 11:  1, 2, 4
   .......
   option 15:  1, 2, 8

我的目标是将此写入表格(我认为这是编写循环的最简单顺序)

 Var1     Var2     Var3     Var4     Var5     Var6     Var7     Var8
 1        2 
 1        3  
 1        4
 ..........
 1        8
 1        2        3
 ...................etc.
 1        2        8
 ...................etc.
 1        2        3       4        5        6        7        8
 2        3
 2        4
 ..........etc.
 2        8

我能够创建第一部分,这是代码:

df <- data.frame(matrix(vector(), 0, 8))
x = 1

for (i in 1:1){
  for(j in 1:8){
    if(i == j){
    } else{
      df[x,1] <- 1
      df[x,2] <- j
      x = x + 1
    }
  }
}

2 个答案:

答案 0 :(得分:3)

combn会为您提供不同数量的可能变量组合,例如

combn(c("A", "B", "C"), 2)

#     [,1] [,2] [,3]
# [1,] "A"  "A"  "B" 
# [2,] "B"  "C"  "C"  

每列代表一组组合,即c(“A”,“B”),c(“A”,“C”),c(“B”,“C”)。

在8个变量的1到8种组合中使用combnplyr::ldply

var <- letters[1:8]
all <- ldply(1:8, function(x)t(combn(var, x)))
all[seq(1,nrow(all), 40),]

#     1    2    3    4    5    6    7    8
# 1   a <NA> <NA> <NA> <NA> <NA> <NA> <NA>
# 41  a    b    g <NA> <NA> <NA> <NA> <NA>
# 81  c    f    h <NA> <NA> <NA> <NA> <NA>
# 121 a    d    f    g <NA> <NA> <NA> <NA>
# 161 d    f    g    h <NA> <NA> <NA> <NA>
# 201 b    c    d    f    g <NA> <NA> <NA>
# 241 b    c    d    e    f    h <NA> <NA>

答案 1 :(得分:2)

x <- list()
for(i in 2:8) {
x[[i]] <- combn(8,i)}

这应该在矩阵格式列表中生成所需的组合,您可以按照自己的方式对其进行操作。