Tidyverse решение, которое не использует фильтр, но получает правильный вывод:
id <- c(1,1,1,1,2,2,2,2)
status <- c("offline","online","online","offline","online","online","online")
date <- c(2017,2018,2006,2006,2018,2002,2004)
tibble(id,status,date)
df %>%
group_by(id, status) %>%
arrange(desc(date)) %>%
summarize(date = first(date))
Это должно дать вам:
A tibble: 4 x 3
# Groups: id [?]
id status date
<dbl> <chr> <dbl>
1 1 offline 2017
2 1 online 2018
3 2 offline 2006
4 2 online 2018
Я думаю, что это немного проще логический потокно это совершенно субъективно.