我有一个如下所示的数据框:
Date Event
2018-06-01 A
2018-06-02 A
2018-06-02 B
2018-06-03 B
2018-06-04 B
2018-06-04 B
2018-06-05 A
我想提取连续多次发生相同事件的序列。因此,例如在上面显示的示例中,这将给我这个:
Event Sequence
A 2
B 4
A 1
我尝试使用rle
,但我遇到了问题,因为df$Event
不是原子矢量。
由于我只有两种类型的事件,我认为我可以做的是用A
替换1
,用B
替换2
,然后使用{{1}在as.numeric
上,以便我可以使用df$Event
。但是,从长远来看,这似乎并不实用,那么另一种更有效的方法是什么呢?
答案 0 :(得分:4)
如果您的“事件”列是因子变量,您只需将其变为字符变量并在其上运行rle
:
rle(as.character(df$Event))
#Run Length Encoding
# lengths: int [1:3] 2 4 1
# values : chr [1:3] "A" "B" "A"
如果要创建问题中显示的data.frame,可以使用
执行此操作with(rle(as.character(df$Event)), data.frame(Event=values, Sequence=lengths))
# Event Sequence
#1 A 2
#2 B 4
#3 A 1
答案 1 :(得分:0)
如评论所示,将变量设置为字符以使用rle只是一个问题。我在这里使用dplyr或data.table
给出了另外两种方法library(dplyr)
library(data.table)
df %>%
group_by(rleid(Event)) %>%
summarise(Sequence =n(),event = Event[1])
df <- setDT(df)
df[,.(Sequence =.N,event = Event)[1],by = rleid(Event)]
`rleid(Event)` Sequence event
<int> <int> <fctr>
1 1 2 A
2 2 4 B
3 3 1 A