【问题标题】:Checking whether numbers can be found in a vector consecutively检查是否可以在向量中连续找到数字
【发布时间】:2022-06-15 21:45:44
【问题描述】:

我的数据如下:

avector <- c(1,2,3,4,5)
num1 <- 1
num2 <- 2
num3 <- 3

num1%in%avector & num2%in%avector
# TRUE

如果可以在avector 中连续找到数字,我想写一行类似的代码,只有TRUE

期望的输出:

num1%in%avector & num2%in%avector
# TRUE

# Code similar to this:
num1%in%vector & num3%in%vector
# FALSE

【问题讨论】:

    标签: r


    【解决方案1】:

    如何将它们粘贴在一起并使用str_detect

    library(stringr)
    str_detect(paste0(avector, collapse=""), paste0(c(num1, num2, num3), collapse=""))
    
    [1] TRUE
    

    【讨论】:

      【解决方案2】:

      baseR 中,您可以通过paste 值来创建一个字符串并检查它是否存在:

      grepl(paste(num1, num2, sep = ","), paste(avector, collapse = ","))
      grepl(paste(num1, num3, sep = ","), paste(avector, collapse = ","))
      

      【讨论】:

        【解决方案3】:
        is.consecutive <- function(x1, x2, vec) {
          x1 %in% vec & x2 %in% vec & abs(x1 - x2) == 1
        }
        
        R > is.consecutive(num1, num2, avector)
        [1] TRUE
        R > is.consecutive(num1, num3, avector)
        [1] FALSE
        

        【讨论】:

          【解决方案4】:

          我们可以用另一个表达式来检查位置差是否等于1,如果等于1,则它们是连续的。

          (num1 %in% avector & num2 %in% avector) & (which(avector == num2) - which(avector == num1) == 1)
          [1] TRUE
          
          (num1 %in% avector & num3 %in% avector) & (which(avector == num3) - which(avector == num1) == 1)
          [1] FALSE
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-04-05
            • 2013-08-02
            • 1970-01-01
            • 1970-01-01
            • 2014-05-30
            相关资源
            最近更新 更多