【发布时间】:2019-07-18 09:08:57
【问题描述】:
我有一个带有事件序列日志的 data.frame。在这里,序列 1 由事件 A、B、C 组成,每个事件都从特定的时间戳(以秒为单位)开始。
df=data.frame(id=runif(10, 1e6, 1e7), sequence = c(1,1,1,2,2,3,3,3,4,4), event=c("A", "B", "C", "B", "C", "A", "B", "C", "B", "C"), starts_at=c(20,22,24,20,30,20,21,23,20,40))
我想要的是按序列类型(有几十种类型,长度2到6)对我的data.frame进行分组:A->B->C或B->C,然后得到一些结果那些类型。期望的输出是:
#### sequence_type number.appearances mean.delay.between.events
#### 1 ABC 2 1.5 / 2
#### 2 BC 2 15
最后一列“平均延迟”将是由序列中连续事件之间的平均差异时间组成的字符串:在 ABC 序列中,A 和 B 之间平均有 1.5 秒,B 和 C 之间平均有 2 秒。 我还想过在新列 diff.1、diff.2 中“传播”每个平均差异...,但似乎很复杂,因为序列有不同的长度。虽然我对呈现这些信息的不同方式持开放态度..
到目前为止,我想出了:
library(dplyr)
df %>% group_by(sequence) %>% arrange(starts_at) %>% summarise(sequence_type = paste0(event, collapse="")) %>% group_by(sequence_type) %>% tally
我没有找到如何实现第二部分。感谢您的帮助...
【问题讨论】:
-
随着
sequence的增加,您是否总是交替使用“ABC”和“AB”?例如,sequence = 1有event = "A", "B", "C";sequence = 2有event = "A", "B";sequence = 3与sequence = 1具有相同的事件;sequence = 4与sequence = 2具有相同的事件。 -
哦不,它真的可以是任何东西(我编辑了问题);有几十种类型的序列,其中大多数长度在 2 到 6 之间。我的原始 data.frame 中没有真正的顺序,一切都被打乱了,这就是我使用“排列”的原因
-
我认为这是从基地使用
rle的机会
标签: r dataframe time-series