嵌套用于循环数据存储

时间:2019-08-09 11:28:30

标签: r loops for-loop nested

我正在尝试构建一个嵌套循环,该循环将返回N = 1,i = 1,j = 1,然后N = 1,i = 1,j = 2 ...直至N = 5,i = 12, j = 5。我将其保存到数据框。有谁知道如何做?我也很想添加第四个循环,例如k,该循环将是1到5,这样循环将在数据帧中保存N,i,j和k,它们的所有组合(1、1、1、1,直至5,12,5,5)。谢谢!

P <- data.frame(PValue = numeric(), NValue=numeric())
P2 <- list()  

for (N in 1:5){
  for (i in 1:12){
    for (j in 1:5) {
    P[i, 1] <- N
    P[i, 2] <- i
    P[i, 3] <- j
    }
  }
 P2[[N]] <- P
}
final <- do.call(rbind, P2)

1 个答案:

答案 0 :(得分:0)

我不太了解您为什么要为此问题处理loop,但是下面是解决方法,

my_vector <- vector()

for (N in 1:5){
  for (i in 1:12){
    for (j in 1:5) {
           for (k in 1:5) {

           my_vector[1] <- N
           my_vector[2] <- i
           my_vector[3] <- j
           my_vector[4] <- k

           if(N==1 & i==1 & j==1 & k==1) {

            df <- my_vector

           }else{

            df <- rbind(df,my_vector)
           }

    }
   }  
  }
 }
 tail(df)  

          [,1] [,2] [,3] [,4]
my_vector    5   12    4    5
my_vector    5   12    5    1
my_vector    5   12    5    2
my_vector    5   12    5    3
my_vector    5   12    5    4
my_vector    5   12    5    5

如果愿意,您可以分配rownamescolnames。但是,expand.grid函数是解决此问题的简单方法。

my_df <- expand.grid(1:5,1:12,1:5,1:5)

tail(my_df)

     Var1 Var2 Var3 Var4
1495    5   11    5    5
1496    1   12    5    5
1497    2   12    5    5
1498    3   12    5    5
1499    4   12    5    5
1500    5   12    5    5