我希望在分组数据框中查找模式。我试图确定何时有连续3行的序列,其中包含信号列中的值1,然后在信号列的第3行包含1时将警报列设置为TRUE。
当我希望检查的滞后数很小时,我可以这样做,但如果我想扩展它来寻找30个连续值,那么ifelse就变得难以管理了。
df <- data.frame(Group = c("A", "A", "A", "A", "B", "B", "B", "C", "C", "C", "C"),
Signal = c(1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1))
每组检查信号列中包含1的连续三行
df <- df %>%
group_by(Group) %>%
mutate(Alert = ifelse(Signal == 1 & lag(Signal) == 1 & lag(Signal, 2) == 1, "Yes", "No"))
对于较大的滞后值,是否有更可扩展的方法?
1条答案
按热度按时间oyxsuwqo1#
您可以使用
consecutive_id()
在Signal列中按当前的1和0进行分组,并使用row_number()
查看是否至少有n
1。(当然,您可以在计算完成后删除consecutive_id(Signal)
信号列。)