估计R中的向量中有多少个连续的真实元素

时间:2019-05-23 17:46:29

标签: r boolean

我有一个非常大的布尔向量(即TF),我想简单地估算出向量中连续T有多少个“块”包含在F元素之间

一个简单的矢量示例,其中包含T个元素的以下三个连续“块”:

x <- c(T,T,T,T,F,F,F,F,T,T,T,T,F,T,T)

输出:

1,1,1,1,0,0,0,0,2,2,2,2,0,3,3

2 个答案:

答案 0 :(得分:5)

您可以这样做:

rle <- rle(x)
rle$values <- with(rle, cumsum(values) * values)
inverse.rle(rle)

[1] 1 1 1 1 0 0 0 0 2 2 2 2 0 3 3

以及基本思想的简化版本(由@Lyngbakr提出):

with(rle(x), rep(cumsum(values) * values, lengths))

答案 1 :(得分:1)

使用rle / inverse.rle的另一种解决方案:

x <- c(T,T,T,T,F,F,F,F,T,T,T,T,F,T,T)
rle_x <- rle(x)
rle_x$values[rle_x$values] <- 1:length(which(rle_x$values))
inverse.rle(rle_x)
# [1] 1 1 1 1 0 0 0 0 2 2 2 2 0 3 3