我有一个非常大的布尔向量(即T
或F
),我想简单地估算出向量中连续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
答案 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