Из того, что вы говорили выше, с утверждением if - это то, из чего я это снял.По сути, он находит, где происходят переключатели, находит три строки перед переключателем и включает его в FinalDF
:
library(tidyverse)
df <- tibble::tribble(
~Subject, ~Testperiod, ~Condition, ~Trigger,
1, 1, 0, 0,
1, 2, 0, 0,
1, 3, 1, 0,
1, 4, 2, 0,
1, 5, 3, 0,
1, 6, 3, 1,
1, 7, 1, 1,
1, 8, 1, 1,
1, 9, 0, 1,
1, 10, 0, 1,
1, 11, 0, 1,
1, 12, 0, 0,
2, 1, 0, 0,
2, 2, 2, 0,
2, 3, 3, 0,
2, 4, 3, 0,
2, 5, 3, 2,
2, 6, 2, 2,
2, 7, 1, 1,
2, 8, 2, 1,
2, 9, 0, 1,
2, 10, 0, 0,
2, 11, 0, 0,
2, 12, 0, 0
)
colchanges <- which(df$Trigger != dplyr::lag(df$Trigger))
ChangesDF <- cbind(rownum = colchanges,value = df[colchanges,"Trigger"])
rows <- dplyr::filter(ChangesDF,Trigger %in% c(1:3)) %>% select(rownum) %>%
mutate(One = rownum - 1,
Two = rownum - 2,
Three = rownum - 3)
rows <- sort(as.vector(t(rows)))
rows <- rows[rows > 0]
FinalDF <- df[rows,]
FinalDF
# A tibble: 12 x 4
Subject Testperiod Condition Trigger
<dbl> <dbl> <dbl> <dbl>
1 1 3 1 0
2 1 4 2 0
3 1 5 3 0
4 1 6 3 1
5 2 2 2 0
6 2 3 3 0
7 2 4 3 0
8 2 4 3 0
9 2 5 3 2
10 2 5 3 2
11 2 6 2 2
12 2 7 1 1