如何对具有相同事件的连续行进行分组并查找平均值?

Arc*_*sai 2 r dataframe

Value <- c(2,3,5,2,5,8,17,3,5)
Event <- c(1,1,2,2,2,1,1,2,2)

group <- data.frame(pt=Value, Event=Event)
Run Code Online (Sandbox Code Playgroud)

我有上面这样的数据,我想以一种会导致以下结果的方式对事件进行分组。

Event Value
1     2.5
2     4
1     12.5
2     4
Run Code Online (Sandbox Code Playgroud)

先感谢您。

akr*_*run 6

我们可以使用rleidfrom创建一个分组变量data.table,用它来获取mean'pt' 的值并返回first'Event' 的值

library(dplyr)
library(data.table)
group %>%
    group_by(grp = rleid(Event)) %>% 
    summarise(Event = first(Event), Value = mean(pt)) %>%
    select(-grp)
# A tibble: 4 x 2
#  Event Value
#  <dbl> <dbl>
#1     1   2.5
#2     2   4  
#3     1  12.5
#4     2   4  
Run Code Online (Sandbox Code Playgroud)

或者使用tapply/rlebase R

with(group, tapply(pt, with(rle(Event),
     rep(seq_along(values), lengths)), FUN = mean))
#    1    2    3    4 
#  2.5  4.0 12.5  4.0 
Run Code Online (Sandbox Code Playgroud)