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

标签 r lubridate rfid

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

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")

关于r - 将多行合并为一个时间间隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58938992/

相关文章:

r - 将附加参数传递给 pracma::integral2

R 不进行 1e+20 数字操作

R:Reticulate——如何调用需要多个命令行参数的 Python 脚本

r - 根据 R 数据框中的两个条件进行变异

sql-server-2008 - 什么数据大小适合在 SQL 服务器中存储 RFID 列?

r - 验证 R 中函数内的对象是否存在

R lubridate 查找连续时间范围和一组间隔之间的非重叠时间段

javascript - 在 Node.JS 中刷新缓冲区数据

android - 在 Android 上读取 EM4102 RFID 标签

在 R 中读取两位数年份的日期