R中的模式匹配

时间:2013-07-08 14:14:07

标签: r grep

我有一个像

这样的清单
> list(c("a","b","c","d"),c("b","c","e"))
[[1]]
[1] "a" "b" "c" "d"

[[2]]
[1] "b" "c" "e"

我有一个序列“bc”。我希望将此模式与我的列表相匹配,并想知道此模式的频率。 要求输出:2 首先,我需要将我的列表转换为这种格式c("abcd"),c("bce"),以便我可以进行匹配。如何转换和匹配? 二,如何计算和存储频率?

我使用grepl函数,但它返回逻辑值,而不是计数。

2 个答案:

答案 0 :(得分:1)

这是使用qdap包中的term.count(非导出函数)的一种方法:

lst <- list(c('a', 'b', 'c', 'd', 'b', 'c'),c('b', 'c', 'e'))
lst2 <- lapply(lst, paste, collapse="") #use lapply to paste the list

## install.packages("qdap")
sapply(lst2, qdap:::term.count, "bc") #count occurences

## > sapply(lst2, qdap:::term.count, "bc")
## bc bc 
##  2  1 

如果您不想使用qdap,请查看term.count的来源并获取所需内容。

答案 1 :(得分:1)

使用@ Tyler的示例数据,您可以使用gregexpr

lst <- list(c('a', 'b', 'c', 'd', 'b', 'c'),
            c('b', 'c', 'e'))
lst2 <- lapply(lst, paste, collapse="")
sapply(gregexpr("bc", lst2, fixed = TRUE), length)
# [1] 2 1