gpt4 book ai didi

r - 如何对顺序事件时间序列进行分组(事件之间有中断)以查找事件的持续时间

转载 作者:行者123 更新时间:2023-12-05 01:30:52 25 4
gpt4 key购买 nike

我在 R 中有一个数据集,其中包含一系列人物、发生的事件以及它们发生的指定时间(以秒为单位,从 0 开始)。它看起来类似于:

event seconds person
1 0.0 Bob
2 15.0 Bob
3 28.5 Bob
4 32.0 Joe
5 38.0 Joe
6 41.0 Joe
7 42.5 Joe
8 55.0 Anne
9 58.0 Anne

我需要过滤每个名字,这意味着每个人的有序事件不会是连续的。

示例(注意 Bob 没有参与事件 4-40 等):

event seconds person
1 0.0 Bob
2 15.0 Bob
3 28.5 Bob
41 256.0 Bob
42 261.0 Bob
43 266.0 Bob
44 268.5 Bob
45 272.0 Bob
46 273.0 Bob
49 569.0 Bob
80 570.5 Bob
81 581.0 Bob

连续且相关的事件以增量 1 分隔。我想找到相关事件的持续时间,例如事件 1-3 是一组,为 28.5 秒。事件 41-46 是另一组持续 17 秒的事件。这对于人员列中列出的所有姓名都是必需的。

我尝试使用 dplyr 过滤名称,然后使用 as.matrix 查找事件行之间的差异,并确定增量大于 1 的位置(表明它不再是当前事件序列的一部分)。我还没有找到一种方法来根据此分配最大值和最小值来确定相关事件的持续时间。虽然解决方案不需要涉及这一步,但这是我能达到的最接近的结果。

最终目标是绘制每个人的非连续持续时间,以便直观地表示每个人对整个数据集的事件参与情况。

提前谢谢您。

最佳答案

使用这个:

DF <- read.table(text = "event seconds person
1 0.0 Bob
2 15.0 Bob
3 28.5 Bob
41 256.0 Bob
42 261.0 Bob
43 266.0 Bob
44 268.5 Bob
45 272.0 Bob
46 273.0 Bob
49 569.0 Bob
80 570.5 Bob
81 581.0 Bob", header = TRUE)

DF$personEvent <- cumsum(c(1L, diff(DF$event)) != 1L)
# event seconds person personEvent
#1 1 0.0 Bob 0
#2 2 15.0 Bob 0
#3 3 28.5 Bob 0
#4 41 256.0 Bob 1
#5 42 261.0 Bob 1
#6 43 266.0 Bob 1
#7 44 268.5 Bob 1
#8 45 272.0 Bob 1
#9 46 273.0 Bob 1
#10 49 569.0 Bob 2
#11 80 570.5 Bob 3
#12 81 581.0 Bob 3

由于我不是大 pipe 的追随者,剩下的就交给你了。

关于r - 如何对顺序事件时间序列进行分组(事件之间有中断)以查找事件的持续时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31375959/

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