相关疑难解决方法(0)

使用dplyr时,使用rle按运行分组

在R中,我想在基于变量的运行对数据进行分组之后对其进行汇总x(也就是说,每组数据对应于连续x值相同的数据的子集).例如,考虑以下数据框,我想计算y每次运行中的平均值x:

(dat <- data.frame(x=c(1, 1, 1, 2, 2, 1, 2), y=1:7))
#   x y
# 1 1 1
# 2 1 2
# 3 1 3
# 4 2 4
# 5 2 5
# 6 1 6
# 7 2 7
Run Code Online (Sandbox Code Playgroud)

在此示例中,x变量的长度为3,然后是2,然后是1,最后是1,在这四次运行中取值1,2,1和2.y这些组中相应的手段是2,4.5,6和7.

在基础R中使用tapply,dat$y作为数据传递,使用rle从中计算运行编号dat$x,并传递所需的汇总函数,很容易执行此分组操作:

tapply(dat$y, with(rle(dat$x), rep(seq_along(lengths), lengths)), mean)
#   1   2   3   4 
# 2.0 4.5 6.0 7.0 
Run Code Online (Sandbox Code Playgroud)

我想我可以直接将这个逻辑转移到dplyr,但到目前为止我的尝试都以错误结束了: …

r run-length-encoding dplyr

13
推荐指数
1
解决办法
1914
查看次数

标签 统计

dplyr ×1

r ×1

run-length-encoding ×1