您可以向我推荐任何类型的答案,不一定需要使用条件语句和循环。
我的数据集包含多个ID和三个警报或组。
这是概念的图像:
这是一个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]即可。
你可以帮我解决这个概念吗?答案 0 :(得分:0)
我注意到的一件事是你使用else
并提供了一个条件;如果您希望每个案例都不包含在else
语句的条件中,则只应使用if
。基本上,您应该使用else(sql50$Flag[j] > sql50$Flag[j-1])
而不是else if(sql50$Flag[j] > sql50$Flag[j-1])
。