R:长数据:如何在满足条件后删除同一 ID 内的所有后续对象?

R: Long-data: how to remove all following obs within same ID once condition is met?

我有长数据,例如:

ID   time   condition
1    1       0
1    2       0
1    3       0
1    4       1
2    1       0 
2    2       1
2    3       1
2    4       0
3    1       1
3    2       1
3    3       0
3    4       0
4    1       0
4    2       1 
4    3       NA
4    4       NA

我只想在满足条件之前保留这些行,所以我想:

ID   time   condition
1    1       0
1    2       0
1    3       0
1    4       1
2    1       0 
2    2       1
3    1       1
4    1       0
4    2       1

我尝试循环,但 a) 它说循环在 R 中不是好的编码风格,b) 它不起作用。 旁注:如果你想知道,在我的例子中 ID 有条件然后又失去它确实有意义,但我只对他们第一次拥有它感兴趣。
谢谢。

这是 dplyr 的简单方法:

library(dplyr)
df %>% group_by(ID) %>%
  filter(row_number() <= which.max(condition) | sum(condition) == 0)
# # A tibble: 7 x 3
# # Groups:   ID [3]
#      ID  time condition
#   <int> <int>     <int>
# 1     1     1         0
# 2     1     2         0
# 3     1     3         0
# 4     1     4         1
# 5     2     1         0
# 6     2     2         1
# 7     3     1         1

它依赖于which.max,其中returns向量中第一个最大值的索引。 | sum(condition) == 0 会注意保留经过审查的案例(其中条件始终为 0)。

使用此数据:

1    1       0
1    2       0
1    3       0
1    4       1
2    1       0 
2    2       1
2    3       1
2    4       0
3    1       1
3    2       1
3    3       0
3    4       0')