library(dplyr)

# create demo data
df <- data.frame(
  id = c(rep("A", 3), rep("B", 5)),
  datetime = c(as.POSIXct("2012/10/11  20:00"),
               as.POSIXct("2012/10/11  23:00"),
               as.POSIXct("2012/10/12  03:00"),
               as.POSIXct("2012/12/11  05:00"),
               as.POSIXct("2012/12/11  11:05"),
               as.POSIXct("2012/12/11  13:00"),
               as.POSIXct("2012/12/11  18:00"),
               as.POSIXct("2012/12/11  20:00")
  ),
  expdata = 1:8
)

col_names <- colnames(df)

# filter
df_filtered <- df %>%
  group_by(id) %>%
  arrange(datetime) %>%
  mutate(timediff = as.numeric(datetime-lag(datetime), units = 'hours'),
         condition_meet = ifelse(is.na(timediff) | timediff > 6, 1, 0),
         condition_meet_id = cumsum(condition_meet)
  ) %>%
  group_by(id, condition_meet_id) %>%
  filter(row_number() == max(row_number())) %>%
  ungroup() %>%
  select_at(col_names)