在R中查找序列中的重复字符

lgx*_*qzz 7 regex string r

例如,我有一个字符串

"AAAAAAACGAAAAAACGAAADGCGEDCG"
Run Code Online (Sandbox Code Playgroud)

我想算一下CG重复多少次.我怎么做?

Sve*_*ein 7

您可以gregexpr用来查找"CG"in 的位置vec.我们必须检查是否没有匹配(-1).该函数sum计算匹配数.

> vec <- "AAAAAAACGAAAAAACGAAADGCGEDCG"
> sum(gregexpr("CG", vec)[[1]] != -1)
[1] 4
Run Code Online (Sandbox Code Playgroud)

如果你有一个字符串向量,你可以使用sapply:

> vec <- c("ACACACACA", "GGAGGAGGAG", "AACAACAACAAC", "GGCCCGCCGC", "TTTTGTT", "AGAGAGA")
> sapply(gregexpr("CG", vec), function(x) sum(x != -1))
[1] 0 0 0 2 0 0
Run Code Online (Sandbox Code Playgroud)

如果您有一个字符串列表,您可以使用unlist(vec),然后使用上面的解决方案.


Jer*_*myS 5

Bioconductor 包 Biostrings 有一个 matchPattern 函数

countGC <- matchPattern("GC",DNSstring_object)
Run Code Online (Sandbox Code Playgroud)

请注意,DNSstring_object是使用 biostring 函数读取的 FASTA 序列readDNAStringSetreadAAStringSet


Hug*_*ugh 5

str_count从使用stringr。虽然不是基本函数,但它很容易记住和阅读。

library(stringr)
str_count("AAAAAAACGAAAAAACGAAADGCGEDCG", "CG")
# [1] 4
Run Code Online (Sandbox Code Playgroud)