В dplyr
мы можем использовать lag
и lead
, чтобы получить предыдущее и следующее значения.
library(dplyr)
df %>%
filter(value == "A" & lead(value) == "B" | value == "B" & lag(value) == "A")
# ID value
#1 3 A
#2 4 B
#3 7 A
#4 8 B
Аналогично в data.table
мы можем использовать shift
:
library(data.table)
setDT(df)[value == "A" & shift(value, type = "lead") == "B" |
value == "B" & shift(value) == "A"]
data
df <- structure(list(ID = 1:8, value = structure(c(1L, 3L, 1L, 2L,
3L, 2L, 1L, 2L), .Label = c("A", "B", "C"), class = "factor")),
class = "data.frame", row.names = c(NA, -8L))