我有以下矢量:
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数,但问题是连续计数器会被一个计数器关闭。你们能想到其他任何解决方案吗?
答案 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