循环R中的条件数量增加

时间:2016-01-28 16:19:21

标签: r conditional-statements

我目前在R脚本中遇到somme困难,因为所需的条件在循环内增加。这是解释和示例。

  1. 想象一个带有1或0的10x10矩阵(LISTE或Meldungen)

    [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [1,] 1 0 0 0 1 0 0 1 0 1 [2,] 1 0 0 0 1 0 1 0 0 1 [3,] 0 0 0 1 0 0 0 0 1 0 [4,] 1 0 1 0 0 0 0 0 1 1 [5,] 1 0 1 0 1 1 0 0 1 0 [6,] 0 1 1 1 0 1 1 1 0 1 [7,] 0 0 1 0 1 1 1 1 0 0 [8,] 1 1 1 0 0 0 1 1 1 0 [9,] 1 0 0 0 0 1 1 0 0 0 [10,] 1 1 1 0 1 0 1 0 1 0 我想在每次迭代时加载一个循环来加载这个数据库。并检查每一行和列(i行和j列)

  2. 的相应可能性

    第一次迭代 1.从j = 1开始到列数  如果i,1 = 1且i + 1,1 = 0则i + 2,1 = 0

    2次迭代(包含原始数据库) 从j = 1开始到列数 如果i,1 = 1且i + 1,1 = 0且i + 2,1 = 0则i + 3,1 = 0

    3次迭代(包含原始数据库) 如果i,1 = 1且i + 1,1 = 0且i + 2,1 = 0且i + 3,1 = 0则i + 4,1 = 0

    等等

    我尝试按照代码

    for(p in 2:time){
      LISTE_neu <- LISTE        #load original database      
    
      if(p == 2){
        for(i in 1:row_number){
          for(j in (1+p):column_number)){
            if(LISTE_neu[i,(j-p)]==1 & Meldungen_num[i,j-(p-1)]==0){LISTE_neu[i,j] <- 0}
          }
        }
        LISTE_neu_2 <- LISTE_neu
      }
    
      if(p == 3){
        for(i in 1:row_number){
          for(j in (1+p):column_number){
            if(LISTE_neu[i,(j-p)]==1 & Meldungen_num[i,j-(p-1)]==0 & Meldungen_num[i,(j-(p-2))]==0){LISTE_neu[i,j] <- 0}
          }
        }
        LISTE_neu_3 <- LISTE_neu
      }
    }
    

    然而此时它正在发挥作用。然而,输入这种增加的条件是非常痛苦的。

    你知道如何让事情更简单吗?知道是否不清楚

1 个答案:

答案 0 :(得分:0)

编辑:只是为了澄清......问题当前表明,在列中,如果第一个条目为1且所有后续条目直至p0,则{ {1}}应为p+1。每个0都应该生成自己的数据框,因此我们得到p个数据框。

Edit2:根据更清晰的愿望更新。

p

使用lis <- list() for (p in 2:9){ LISTE_neu <- LISTE met <- LISTE_neu[1,] == 1 & colSums(Meldungen_num[2:p,]) == 0 LISTE_neu[p+1,met] <- 0 lis[[p]] <- LISTE_neu } 来调用结果,因此lis[[p]]使用p = 2

解释:基本上,当lis[[2]]增加时,您希望查看p的更大部分,并查看所有值是否为Meldungen_num。由于所有值都必须为0,因此它们的总和也必须为0。因此,我将所有感兴趣的值(0)和它们(Meldungen_num[2:p,])相加。请注意,所有列同时发生这种情况(因此我们获得的数量与列数一样多)。然后我将所有这些比较为0,并且每个列分别得到答案。这样一条线就可以同时检查给定colSums的所有列。 p然后包含哪些列符合您的条件。

然后,我只使用met0写入符合我们条件的列。然后,我将此新表存储在列表LISTE_neu[p+1,met] <- 0中,然后转到下一个lis