如何解决R中条件语句和循环的这个错误?

时间:2018-01-09 22:22:10

标签: r loops conditional

您可以向我推荐任何类型的答案,不一定需要使用条件语句和循环。

我的数据集包含多个ID和三个警报或组。 这是概念的图像:click me
这是一个ID的实际数据集:Click me

概念是: 我有三个警告:Relearn - Rebuild - Replace。
重新学习后:重建或替换可以来,但重新学习不能来 重建后:替换可以来,但重新学习不能来 更换后:重新学习和重建不能来。如果有任何替换只能来

我附上了图片和数据集以便更清楚地理解,这是我的尝试:

temp1 = NULL
temp2 = NULL
sql50 = NULL
for(i in 1:nrow(BrokenPins)) #First Loop 
{ 

  sql50 = sqldf(paste("select * from rule_data where key = '",BrokenPins[i,1],"'",sep = ""))
  for(j in 1:nrow(sql50))
  { #Second Loop
    while (head(sql50$Flag,1) == sql50$Flag[j] )
    {
      temp1 = sql50[j,]
      temp2 = rbind(temp2,temp1)
      print("Send")
      if(j == 1 || sql50$Flag[j] == sql50$Flag[j-1])
      {
        j = j+1
      }
      else(sql50$Flag[j] > sql50$Flag[j-1]) 
      {
        break
      }
    }
  }
}

第一个循环将遍历每个id,第二个循环将为我提供该id的所有警报。 所以在图像中我添加了发送而不发送。它不会在实际的表中。这基本上意味着发送意味着将其复制到新的数据帧,就像我在代码上面做rbind并且不发送意味着不要复制它。以上代码将运行但只采取第一个并结束它。

最后,基于以上数据集Click me:用于一个ID(密钥),标记(1 - 重新学习,2重建,3替换)。所以基于这个数据集。我的输出应该有第1,2和7行,因为First Relearn [Flag 1]然后重建[Flag 2]然后再重新学习[Flag 1]不能来,只重建[Flag 2]并替换[Flag 2]即可。

你可以帮我解决这个概念吗?

1 个答案:

答案 0 :(得分:0)

我注意到的一件事是你使用else并提供了一个条件;如果您希望每个案例都不包含在else语句的条件中,则只应使用if。基本上,您应该使用else(sql50$Flag[j] > sql50$Flag[j-1])而不是else if(sql50$Flag[j] > sql50$Flag[j-1])