计算R

时间:2018-12-08 05:35:32

标签: r pattern-matching boolean-expression

我有一个布尔向量,我想在其中计算某些模式的出现次数。

例如,对于模式"(1,1)"和向量"(1,1,1,0,1,1,1)",答案应为4。

我发现可以帮助的唯一内置函数是grepRaw,它可以找到较长字符串中特定字符串的出现。但是,当与模式匹配的子字符串重叠时,它似乎会失败:

length(grepRaw("11","1110111",all=TRUE))
# [1] 2

在这种情况下,您有什么想法来获得正确的答案吗?

编辑1

恐怕Rich的答案适用于我发布的特定示例,但在更笼统的设置中失败了:

> sum(duplicated(rbind(c(FALSE,FALSE),embed(c(TRUE,TRUE,TRUE,FALSE,TRUE,TRUE,TRUE),2)))) [1] 3

在另一个示例中,预期答案将为0。

1 个答案:

答案 0 :(得分:1)

使用功能rollapply,您可以应用width = 2的移动窗口对值求和。然后,您可以对结果等于2的记录求和,即sum(c(1,1))

 library(zoo)

 z <- c(1,1,1,0,1,1,1)
 sum(rollapply(z, 2, sum) == 2)