Я думаю, что это должно работать для вас:
library(dplyr)
df <- tibble(
id1 = c(1,2,2,2,2,3,3,3,4,5,5,5),
id2 = 1:12,
binary = c(1,1,1,1,1,0,0,0,1,1,1,1)
)
df %>%
group_by(id1) %>%
filter(
# binary == 1, # uncomment this for bonus points :)
row_number() == 1 | row_number() == n()
) %>%
ungroup()
С row_number()
Я проверяю восходящую последовательность по группам, чтобы сохранить только те строки, которые являются первыми (row_number() == 1
), или последний элемент в группе (row_number() == n()
, где n()
дает вам количество наблюдений в каждой группе).
Я считаю, что есть более элегантные или вычислительно эффективные решения,но это должно, по крайней мере, сделать свое дело.