【发布时间】:2018-06-19 00:53:47
【问题描述】:
您可以建议我任何类型的答案,不一定需要使用条件语句和循环。
我的数据集包含多个 id 和三个警报或组。
这是该概念的图片:
这是一个 ID 的实际数据集:Click me
概念是:
我有三个警报:重新学习 - 重建 - 替换。
并且在重新学习之后:重建或替换可以来,但重新学习不能来
重建后:replace 可以来,但 relearn 不能来
替换后:无法重新学习和重建。如果有任何替换只能来
我附上了图像和数据集以便更好地理解,这是我的尝试:
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(key),Flag(1-Relearn,2-Rebuild,3-replace)。所以基于这个数据集。我的输出应该有第 1、2 和 7 行,因为 First Relearn[Flag 1] 来了,然后 Rebuild[Flag 2] 然后再 relearn[Flag 1] 不能来,只有重建 [Flag 2] 和 replace[Flag 2] 可以。
你能帮我解决这个概念吗?
【问题讨论】:
-
以可重现的形式提供输入数据,而不是图像。见minimal reproducible example 和
?dput。 -
添加数据(不是图像)将加快答案
-
好的,谢谢大家!我会更新我的问题
标签: r loops conditional