0

You can suggest me any sort of answers, not necessarily need using conditional statements and Loops.

I have the data set with several ids and and three alert or groups. here is the image for the concept: click me
and here is the actual Data set for one ID: Click me

Concept is: I have three alert: Relearn - Rebuild - Replace.
and after relearn: rebuild or replace can come but relearn cannot come
and after rebuild: replace can come but relearn cannot come after replace: relearn and rebuild cannot come. if there is any replace only that can come

I have attached the image and Dataset for better clear understanding and Here is my try:

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
      }
    }
  }
}

First loop will go through each id and second loop will give me all the alert for that id. so in the image i have added send and dont send. it wont be in actual table. that basically means send means copy it to new dataframe like i am doing above rbind in the code and dont send means dont copy it. This Above piece of code will run but only take the first and end it.

Finally, Based On above Data set Click me: that is for one ID (key), Flag (1 - Relearn, 2-Rebuild,3-replace). so based on this dataset. my output should have Row 1, 2 and 7 because First Relearn[Flag 1] came then Rebuild[Flag 2] then again relearn[Flag 1]cannot come, only rebuild [Flag 2] and replace[Flag 2] can.

can you help me solve this concept?

1 Answers1

0

One thing I notice is that you use else and also provided a condition; you should only use else when you want every case that is not included in the condition of your if statement. Basically, instead of using else(sql50$Flag[j] > sql50$Flag[j-1]) you should be using else if(sql50$Flag[j] > sql50$Flag[j-1]).

  • Thanks for that Cameron! it did helped me little but still have no clue. how do i solve that idea which is mentioned in image! – Tarun Mirani Jan 10 '18 at 14:56