让我们考虑如下的二进制序列
00001001110000011000000111111
我想计算序列中重复的1,如下所示
00001001230000012000000123456
我在考虑以下解决方案
> b<-c(0,0,0,0,1,0,0,1,1,1,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,1,1,1)
> rle(b)
Run Length Encoding
lengths: int [1:8] 4 1 2 3 5 2 6 6
values : num [1:8] 0 1 0 1 0 1 0 1
但“长度”和“数字”的结果不适用于我的情况。
答案 0 :(得分:1)
我们可以使用rleid
中的内置函数data.table
作为ave
中的分组变量,获取序列并乘以&#39; b&#39;因此,在乘法
library(data.table)
ave(b, rleid(b), FUN = seq_along)*b
#[1] 0 0 0 0 1 0 0 1 2 3 0 0 0 0 0 1 2 0 0 0 0 0 0 1 2 3 4 5 6
或者使用rle
中的base R
,我们通过复制&#39;值的序列来创建一个组。长度为&#39;然后像以前一样在ave
中使用它
grp <- with(rle(b), rep(seq_along(values), lengths))
ave(b, grp, FUN = seq_along)*b
#[1] 0 0 0 0 1 0 0 1 2 3 0 0 0 0 0 1 2 0 0 0 0 0 0 1 2 3 4 5 6