我想计算在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
Run Code Online (Sandbox Code Playgroud)
它将计数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
Run Code Online (Sandbox Code Playgroud)
仍然会计数1.我开始看着rle()但是我卡住了.任何帮助将不胜感激.谢谢!
这应该工作:
with(rle(x), sum(lengths[values] >= 2))
Run Code Online (Sandbox Code Playgroud)
说明:
当您使用布尔值时,您可以从中获利.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
Run Code Online (Sandbox Code Playgroud)
现在,您只需要此向量中与TRUEs 对应的值.rle(x)$values返回具有外观顺序的向量.例:
rle(x)$values
[1] TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE
Run Code Online (Sandbox Code Playgroud)
您可以使用它来仅获取向量中的TRUEs lengths:
rle(x)$lengths[rle(x)$values]
[1] 1 3 1 1 2
Run Code Online (Sandbox Code Playgroud)
最后一步应该是显而易见的:计算这些值中有多少更重要或等于2.所有这些一起(性能改进):
with(rle(x), sum(lengths[values] >= 2))
[1] 2
Run Code Online (Sandbox Code Playgroud)