У меня есть набор данных, похожий, но гораздо более длинный и сложный, чем следующий:
df<-data.frame(ID = c(1,1,2,2,3,3,3),
week = c(20,21,10,15,20,21,22),
var1 = c(0,1,0,1,0,0,1))
ID week var1
1 1 20 0
2 1 21 1
3 2 10 0
4 2 15 1
5 3 20 0
6 3 21 0
7 3 22 1
Я хотел бы создать новый фрейм данных, который хранит все строки, где var1 = 1, и сохраняетпредыдущая строка, если идентификатор совпадает, а неделя ровно на одну единицу меньше, чем включенная строка.Новый фрейм данных будет выглядеть так:
ID week var1
1 1 20 0
2 1 21 1
3 2 15 1
4 3 21 0
5 3 22 1
Я пытался установить подмножество
df1<-df[which(df$var1 == 1) - 1, ]
, но это дает мне предыдущий ряд, соответствует ли он моим критериям или нет.
Я также пробовал отставать в dplyr
df2<-filter(df, var1==1 & lag(week)==week-1)
, но это дает мне только те строки, которые соответствуют обоим критериям.Весь код, который я искал, приводит к тому или иному из этих результатов.