我有这个载体:
a <- c(0,0,1,0,3,0,0,0,0,5,6)
我正在寻找一个函数,告诉我每个零的长度
例如,它为向量 a 返回[1] 2 1 4
。
答案 0 :(得分:3)
您可以使用rle
获取向量中相同元素的lengths
和values
行。然后,需要对所需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]))