gpt4 book ai didi

r - 将分组数据过滤到分组发生变化的行

转载 作者:行者123 更新时间:2023-12-02 09:10:50 24 4
gpt4 key购买 nike

使用这些数据(下面使用 dput()),其中 IndIDII 是一个分组列,其中有多个 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 过滤到 MigStratFactlead() 值与当前值不匹配的行,并且还保留当前字段。

使用下面的代码,对于每个 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))

最佳答案

尝试更改为

Dat %>%
group_by(IndIDII) %>%
filter(lead(MigStratFact) != MigStratFact | lag(MigStratFact) != MigStratFact)
# IndIDII Year MigStratFact
# 1 BHS_376 2017 MidDist
# 2 BHS_376 2018 ShortDist
# 3 BHS_378 2015 MidDist
# 4 BHS_378 2016 ShortDist
# 5 BHS_391 2015 ShortDist
# 6 BHS_391 2016 MidDist
# 7 BHS_394 2017 MidDist
# 8 BHS_394 2018 ShortDist
# 9 BHS_395 2017 MidDist
# 10 BHS_395 2018 ShortDist

关于r - 将分组数据过滤到分组发生变化的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52395268/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com