1

所以我有一个核苷酸序列,我需要计算 gaga 这个词在序列中出现的次数。这是我到目前为止所拥有的:

dna=c("a","g","c","t")
N=16
x=sample(dna,N,4)
x2=paste(x,collapse="")
x2

这是一个示例输出:

gtaggcctaattataa

最后,我将编写一个循环来让它运行 100 次,并绘制一个单词“gaga”计数的直方图。所以,我的主要问题是:如何编写函数或代码来搜索字符串 x2 并计算单词“gaga”的出现次数。

任何帮助,将不胜感激!谢谢!

4

4 回答 4

4
?regex
sapply( gregexpr( "gaga", c("gtaggcctaattataa", 
                            "gtaggcctaatgagaataa", 
                            "gagagaga") ) ,
        function(x) if( x[1]==-1 ){ 0 }else{ length(x) } )
[1] 0 1 2
于 2013-10-10T19:20:18.967 回答
2

这实际上是在 qdap 包中找到的 DWin 解决方案的包装器:

x<- c("gtaggcctaattataa", "gtaggcctaatgagaataa", "gagagaga")

library(qdap)
qdap:::termco.h(x, "gaga", seq_along(x))

##   3 word.count term(gaga)
## 1 1          1          0
## 2 2          1          1
## 3 3          1          2

如果你只想要计数:

qdap:::termco.h(x, "gaga", 1:3)[, 3]
于 2013-10-10T19:34:35.753 回答
1

这是一种计算重叠的方法:

vec <- c("gagatttt",
"ttttgaga",
"gaga",
"tttgagattt",
"gagagaga",
"gagaga")


lengths(strsplit(vec, "ga(?=ga)", perl = TRUE)) - 1L
# [1] 1 1 1 1 3 2
于 2014-02-28T08:19:04.957 回答
1

stri_count_fixedstringi包装中使用

    dna=c("a","g","c","t")
    N=160
    x=sample(dna,N,4)
    x2 <- stri_paste(x,collapse="")
    stri_count_fixed(x2,"gaga")
    ## 2
于 2014-03-26T12:07:24.630 回答