如何select根据R中组内行的顺序进行分组

How to select group based on the order of rows within group in R

例如,我有以下数据框:

ID variable order
1 a 1
1 b 2
2 b 1
2 a 2
2 b 3
3 b 1
3 a 2

我只想保留“a”出现在“b”之前的 ID 组(即,a 的“顺序”小于 b)。所以结果看起来像这样:

ID variable order
1 a 1
1 b 2
2 b 1
2 a 2
2 b 3

其中仅保留 ID 1 和 2(及其所有原始行),而 ID 3 中的所有行都被删除,因为 b 的“顺序”小于 a。谁能指导如何在 R 中完成此操作?

your_data %>%
  group_by(ID) %>%
  filter(any(variable == "a" & lead(variable, default = "not b") == "b"))

这将忽略 order 列并基于每个 ID 组中的行顺序。它检查一行上是否存在 "a" 以及紧邻的下一行是否存在 "b"

在您的评论中,您说 '"a" 就在“b”之前 - 我同意 “就在”之前 澄清.如果一个组有值 "a", "c", "b",它不会保留在我的答案中,因为“a”不是 “就在”“b”之前。