如何在R中找到最长的相同数字

如何在R中找到最长的相同数字,r,R,例如,我有这样的数据 x<-c(0,0,1,1,1,1,0,0,1,1,0,1,1,1) x以下是一种使用“cgwtools”包中的sekle的方法: 用途如下: 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 x您也可以通过使用rle和reverse.rle组合使用base R轻松实现这一点 创建函数 lon

例如,我有这样的数据

x<-c(0,0,1,1,1,1,0,0,1,1,0,1,1,1)

x以下是一种使用“cgwtools”包中的
sekle
的方法:

用途如下:

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

x您也可以通过使用
rle
reverse.rle
组合使用base R轻松实现这一点

创建函数

longSeq2 <- function(x, range = TRUE){
  temp <- rle(x == 1)
  temp$values <- temp$lengths == max(temp$lengths[temp$values == TRUE]) 
  temp <- which(inverse.rle(temp))
  if (isTRUE(range)) range(temp) else temp
}
lonseq2
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
y <- c(0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1)
longSeq(y)
# [1]  9 11
longSeq2 <- function(x, range = TRUE){
  temp <- rle(x == 1)
  temp$values <- temp$lengths == max(temp$lengths[temp$values == TRUE]) 
  temp <- which(inverse.rle(temp))
  if (isTRUE(range)) range(temp) else temp
}
x <- c(0,0,1,1,1,1,0,0,0,0,0,0,0,1,1,0,1,1,1)
longSeq2(x)
## [1] 3 6
longSeq2(x, range = FALSE)
## [1] 3 4 5 6

y <- c(0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1)
longSeq2(y)
## [1] 9 11
longSeq2(y, range = FALSE)
## [1] 9 10 11