Arrays 计算二进制序列中重复的1-r 让我们考虑一个二进制序列,如下面的 00001001110000011000000111111

Arrays 计算二进制序列中重复的1-r 让我们考虑一个二进制序列,如下面的 00001001110000011000000111111,arrays,r,Arrays,R,我想计算序列中重复的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 >b rle(b)

我想计算序列中重复的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
>b rle(b)
游程编码
长度:int[1:8]4 1 2 3 5 2 6 6
值:num[1:8]01101

但是“length”和“num”中的结果不适用于我的情况

我们可以使用
data.table
中的内置函数
rleid
作为
ave
中的分组变量,获取序列并与“b”相乘,以便在相乘后,任何值为0都将为0

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

或者使用
baser
中的
rle
,我们通过复制带有“长度”的“值”序列来创建一个组,然后像以前一样在
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

grp它是“b”中的字符串还是数字向量?如果您使用的是
data.table
,另一种可能是
rowid(rleid(b))*b