将一系列元素与具有一些相似序列的较长向量匹配

时间:2016-01-19 13:12:01

标签: 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)

很抱歉,但无法通过任何方式实现,因为使用匹配将匹配单个元素,但不匹配字符串或元素序列。

2 个答案:

答案 0 :(得分:2)

为了添加当前答案和戴维斯的评论,

    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_count_fixed返回预期的0。

一个不依赖于粘贴到字符串的不同答案你应该喜欢它,但我怀疑它是慢的:

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

答案 1 :(得分:1)

cy <- paste(y, collapse = "")
cx <- paste(x, collapse = "")
(nchar(cy) - nchar(gsub(cx, "", cy))) / nchar(cx)
[1] 4

当预期结果为0时,@ jamieRowen提到的情况也很稳健。