例如,我有这样的数据
x<-c(0,0,1,1,1,1,0,0,1,1,0,1,1,1)
我想通过考虑开始和结束位置来找到最长的"1"序列,在这种情况下应该是(3,6)
在R中如何做到这一点
谢谢大家
这是一种使用seqle
"cgwtools"包的方法:
library(cgwtools) y <- seqle(which(x == 1)) z <- which.max(y$lengths) y$values[z] + (sequence(y$lengths[z]) - 1) # [1] 3 4 5 6
range
如果你只想要"3"和"6",你可以使用.
seqle
"扩展rle
到查找和编码线性序列".
以下是作为函数的答案:
longSeq <- function(invec, range = TRUE) { require(cgwtools) y <- seqle(which(invec == 1)) z <- which.max(y$lengths) out <- y$values[z] + (sequence(y$lengths[z]) - 1) if (isTRUE(range)) range(out) else out }
用法是:
x <- c(0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1) longSeq(x) # [1] 3 6 longSeq(x, range = FALSE) # [1] 3 4 5 6
并且,以KFB的示例输入:
y <- c(0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1) longSeq(y) # [1] 9 11