С этими данными (ниже с dput()
), где IndIDII
- столбец группировки, внутри которого есть несколько наблюдений MigStratFact
для каждого Year
.
> head(Dat)
IndIDII Year MigStratFact
1 BHS_376 2015 MidDist
2 BHS_376 2016 MidDist
3 BHS_376 2017 MidDist
4 BHS_376 2018 ShortDist
5 BHS_378 2015 MidDist
6 BHS_378 2016 ShortDist
Я бынравится фильтровать Dat
по строкам, где lead()
значение MigStratFact
не соответствует текущему значению, И также сохраняет текущее поле.
Используя приведенный ниже код, для каждого IndIDII
я могу фильтровать строки, где lead(MigStratFact) != MigStratFact
, но не уверен, как также сохранить исходную (т. Е. Текущую) строку.
Dat %>%
group_by(IndIDII) %>%
filter(lead(MigStratFact) != MigStratFact) %>%
as.data.frame()
Желаемое решение будет отфильтровано по строкам 3,4,5,6,8,9,11,12,15,16.
Заранее большое спасибо
Dat <- structure(list(IndIDII = c("BHS_376", "BHS_376", "BHS_376", "BHS_376",
"BHS_378", "BHS_378", "BHS_378", "BHS_391", "BHS_391", "BHS_394",
"BHS_394", "BHS_394", "BHS_395", "BHS_395", "BHS_395", "BHS_395"
), Year = c("2015", "2016", "2017", "2018", "2015", "2016", "2017",
"2015", "2016", "2016", "2017", "2018", "2015", "2016", "2017",
"2018"), MigStratFact = structure(c(3L, 3L, 3L, 2L, 3L, 2L, 2L,
2L, 3L, 3L, 3L, 2L, 3L, 3L, 3L, 2L), .Label = c("Resident", "ShortDist",
"MidDist", "LongDist"), class = "factor")), class = "data.frame", row.names = c(NA,
-16L))