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

问题描述 投票:1回答:1

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

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

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

arrays r
1个回答
1
投票

我们可以使用来自rleid的内置函数data.table作为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

或者使用来自rlebase R,我们通过使用'lengths'复制'values'的序列来创建一个组,然后像以前一样在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
© www.soinside.com 2019 - 2024. All rights reserved.