确定R中的向量中是否存在x个连续重复项

时间:2015-03-14 06:08:04

标签: r

我有以下矢量:

p<-c(0,0,1,1,1,3,2,3,2,2,2,2)

如果向量中有x个连续的重复项,我试图编写一个返回TRUE的函数。

函数调用found_duplications(p,3)将返回True,因为有三个连续的1&#39。函数调用found_duplications(p,5)将返回False,因为没有5个连续的重复数字。函数调用found_duplications(p,4)将返回True,因为有四个连续的4个。

我有几个想法。有duplicated()函数:

duplicated(p)
> [1] FALSE  TRUE FALSE  TRUE  TRUE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE

我可以创建一个for循环来计算向量中的TRUE数,但问题是连续计数器会被一个计数器关闭。你们能想到其他任何解决方案吗?

2 个答案:

答案 0 :(得分:10)

您也可以

find.dup <- function(x, n){
 n %in% rle(x)$lengths
}

find.dup(p,3)
#[1] TRUE
find.dup(p,2)
#[1] TRUE
find.dup(p,5)
#[1] FALSE
find.dup(p,4)
#[1] TRUE

答案 1 :(得分:2)

p<-c(0,0,1,1,1,3,2,3,2,2,2,2)

find.dup <- function(x, n) {
  consec <- 1
  for(i in 2:length(x)) {
    if(x[i] == x[i-1]) {
      consec <- consec + 1
    } else {
      consec <- 1
    }
    if(consec == n)
      return(TRUE) # or you could return x[i]
  }
  return(FALSE)
}

find.dup(p,3)
# [1] TRUE

find.dup(p,4)
# [1] TRUE

find.dup(p,5)
# [1] FALSE