首页 > 解决方案 > 向量中循环数据的完整性检查

问题描述

我有一个长度为“l”的向量,它必须由一个严格指定的循环序列组成,例如“1 2 3”

x <- c(1,2,3,1,2,3,1,2,3,1,3,1,2,3,1,2,3,1,2,3,1,2,3,2,3,1,2,3,1,2,3,1,2,3,1,2,3)

但它包含空白,例如:“1 3”或“2 3”或其他类似的序列违规变体,我如何才能找到序列中的错误并删除那些不完整的序列?

标签: r

解决方案


你可以通过循环来消除你的“差距” x。修改seq以下代码以扫描您喜欢的任何序列。

x <- c(1,2,3,1,2,3,1,2,3,1,3,1,2,3,1,2,3,1,2,3,1,2,3,2,3,1,2,3,1,2,3,1,2,3,1,2,3)
seq = c(1,2,3)

l = 1
while(TRUE){
  ### check if a new sequence starts
  if(x[l]==seq[1]){
    counter = 0
    ### count elements of the sequence candidate
    while(TRUE){
      ### break if new sequence starts or if vector is completly scanned
      if(x[l+counter+1] %in% c(1,NA)) break
      counter = counter + 1
    }
    ### remove current sequence if not identical to seq
    if(!identical(x[l:(l+counter)],seq)){
      x = x[-(l:(l+counter))]
      l = l - counter
      next
    }
  }
  l = l + 1
  ### finish if vector completly scanned
  if(l > length(x)) break
}

推荐阅读