将多行合并为一个时间间隔

combine multiple rows into one time interval

我有一个数据框,它由一些带标签的动物访问喂食器的日期和时间组成。看起来像这样 -

ID    date_time                 
A     2019-11-02 08:07:47    
B     2019-11-02 08:07:48
A     2019-11-02 08:07:49
A     2019-11-02 08:07:50
A     2019-11-02 08:09:12
A     2019-11-02 08:09:13
B     2019-11-02 08:09:17

我想将所有在 n 秒内记录的数据点集中到一行中,这样它看起来像这样 -

ID     start_date_time.      end_date_time
A      2019-11-02 08:07:47   2019-11-02 08:07:50
B      2019-11-02 08:07:48   2019-11-02 08:07:48
A      2019-11-02 08:09:12   2019-11-02 08:09:13
B      2019-11-02 08:09:17   2019-11-02 08:09:47

我试过使用 Lubridate 但没有成功。

谢谢

也许你可以这样做(N = 10s):

library(tidyverse)

dat %>%
  group_by(ID) %>%
  mutate(
    events = cut(date_time, '10 s', labels = F)
    ) %>%
  group_by(events, add = T) %>%
  summarise(
    start_date_time = min(date_time), 
    end_date_time   = max(date_time)
    ) %>%
  ungroup() %>%
  select(-events)

# # A tibble: 4 x 3
#   ID    start_date_time     end_date_time      
#   <chr> <dttm>              <dttm>             
# 1 A     2019-11-02 08:07:47 2019-11-02 08:07:50
# 2 A     2019-11-02 08:09:12 2019-11-02 08:09:13
# 3 B     2019-11-02 08:07:48 2019-11-02 08:07:48
# 4 B     2019-11-02 08:09:17 2019-11-02 08:09:17

数据:

structure(list(
  ID = c("A", "B", "A", "A", "A", "A", "B"),
  date_time = structure(
    c(
      1572678467,
      1572678468,
      1572678469,
      1572678470,
      1572678552,
      1572678553,
      1572678557
    ),
    class = c("POSIXct", "POSIXt"),
    tzone = ""
  )
),
row.names = c(NA,-7L),
class = "data.frame")