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