R 将元素序列与具有类似序列的较长向量相匹配

R 将元素序列与具有类似序列的较长向量相匹配,r,R,如何计算元素x的特定序列在较长向量y中存在的次数 x <- c(1,2,3,4,5,6) y <- c(1,2,3,4,5,6,3,2,0,1,2,3,4,5,6,1,2,3,4,5,6,9,2,1,2,3,4,5,6,1,2,3,4) x为了增加当前答案和Davids评论 length(gregexpr(paste(x,collapse = ""), paste(y, collapse=""))[[1L]]) 在一般情况下失败。这是因为如果没有匹配项,结果索引为-1,长

如何计算元素x的特定序列在较长向量y中存在的次数

x <- c(1,2,3,4,5,6)
y <- c(1,2,3,4,5,6,3,2,0,1,2,3,4,5,6,1,2,3,4,5,6,9,2,1,2,3,4,5,6,1,2,3,4)

x为了增加当前答案和Davids评论

    length(gregexpr(paste(x,collapse = ""), paste(y, collapse=""))[[1L]])
在一般情况下失败。这是因为如果没有匹配项,结果索引为-1,长度为1,而不是正确答案0

    x = c(1,2,3)
    y = c(4,3,2,4,3,4,3,2,2,3)
    length(gregexpr(paste(x,collapse = ""), paste(y, collapse=""))[[1L]])
    # [1] 1
stringi::stri\u count\u fixed
返回预期的0

另一个答案不依赖于粘贴到字符串。如果您愿意,我怀疑它速度较慢:

    library(zoo)
    sum(rollapply(y, width = length(x), function(v) all(x == v)))

cy您希望匹配的是序列还是特定的数字?不清楚你想要的输出是什么?我想你正在寻找类似于
stringi::stri\u count\u fixed(粘贴(y,collapse=”),粘贴(x,collapse=”)
Wrap with
length()
的东西,你已经找到了。最后一个可以写为:
sum(rollappy(y,length(x),idential,x))
Bah,错过了,看得很清楚
cy <- paste(y, collapse = "")
cx <- paste(x, collapse = "")
(nchar(cy) - nchar(gsub(cx, "", cy))) / nchar(cx)
[1] 4