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)
先感谢您。
我们可以使用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/rle在base 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)