以二进制序列计算重复的1 - r

时间:2018-03-04 07:55:01

标签: arrays r

让我们考虑如下的二进制序列

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

但“长度”和“数字”的结果不适用于我的情况。

1 个答案:

答案 0 :(得分:1)

我们可以使用rleid中的内置函数data.table作为ave中的分组变量,获取序列并乘以&#39; b&#39;因此,在乘法

之后,任何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

或者使用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