找出相同值的连续长度

时间:2018-01-23 14:06:43

标签: r vector

我有这个载体:

a <- c(0,0,1,0,3,0,0,0,0,5,6)

我正在寻找一个函数,告诉我每个零的长度

例如,它为向量 a 返回[1] 2 1 4

2 个答案:

答案 0 :(得分:3)

您可以使用rle获取向量中相同元素的lengthsvalues行。然后,需要对所需lengths

进行子集化
with(rle(a), lengths[values == 0])
#[1] 2 1 4

答案 1 :(得分:3)

只是为了好玩,这里有一些丑陋的替代方案:

tapply(a[a == 0], list(c(0, cumsum(head(a, -1) != tail(a, -1)))[a == 0]), length)

或与table相同的想法:

unname(table(c(0, cumsum(head(a, -1) != tail(a, -1)))[a == 0]))
unlist(Filter(length, lapply(split(a, cumsum(c(0, diff(a) != 0))), function(i)
                                                                   length(i)[all(i==0)])))
library(data.table)
data.table(a)[, grp := rleid(a)][a == 0, .(counts = .N), by = grp][[2]][]
unname(table(cumsum(c(1, diff(a)) !=0 )[a == 0]))