gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 10:59:16 24 4
gpt4 key购买 nike

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

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com