我有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
}
}
}
答案 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种组合中使用combn
和plyr::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)}
这应该在矩阵格式列表中生成所需的组合,您可以按照自己的方式对其进行操作。