我想计算在R中看到两个连续的TRUE值的次数。例如,
x <- c(T,F,T,T,F,F,T,F,T,F)
x
[1] TRUE FALSE TRUE TRUE FALSE FALSE TRUE FALSE TRUE FALSE
它将计数1,因为在位置3处为TRUE,在位置4处为TRUE。如果有超过2个连续的TRUE,那么我只想计算一次,即此向量
x <- c(T,F,T,T,T,F,T,F,T,F)
x
[1] TRUE FALSE TRUE TRUE TRUE FALSE TRUE FALSE TRUE FALSE
仍然会计数1.我开始看rle()
,但我卡住了。任何帮助将不胜感激。谢谢!
答案 0 :(得分:9)
这应该有效:
with(rle(x), sum(lengths[values] >= 2))
<强>解释强>
当您使用布尔时,您可以从中获利。 rle(x)$lengths
将返回向量中连续发生的TRUE
或FALSE
次。实施例
x <- c(T,F,T,T,T,F,T,F,T,F,T,T)
rle(x)$lengths
[1] 1 1 3 1 1 1 1 1 2
现在,您只需要此向量中与TRUE
s对应的值。 rle(x)$values
返回具有外观顺序的向量。例如:
rle(x)$values
[1] TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE
您可以使用它来仅获取TRUE
向量中的lengths
:
rle(x)$lengths[rle(x)$values]
[1] 1 3 1 1 2
最后一步应该是显而易见的:计算这些值中有多少更重要或等于2.一起(性能改进):
with(rle(x), sum(lengths[values] >= 2))
[1] 2
答案 1 :(得分:1)
您还可以将display: none
和$('.comments')
用于此目的,如下所示:
cumsum
答案 2 :(得分:-1)
以下是来自rleid
的{{1}}的另一个选项。 data.table
为不同的相邻元素提供唯一ID,与x相乘,将原始向量中与rleid
对应的元素转换为0,获得FALSE
转换的频率到逻辑向量(tabulate
)并获取==2
。
sum