【发布时间】:2018-09-18 22:12:13
【问题描述】:
有了这些数据(下面有dput()),其中IndIDII是一个分组列,其中每个Year有多个MigStratFact观察。
> 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 过滤到MigStratFact 的lead() 值与当前值不匹配的行,并保留当前字段。
使用下面的代码,对于每个 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))
【问题讨论】: