gpt4 book ai didi

regex - R中的匹配和计数字符串(DNA的k-mer)

转载 作者:行者123 更新时间:2023-12-04 13:07:00 24 4
gpt4 key购买 nike

我有一个字符串列表(DNA 序列),包括 A、T、C、G。我想找到所有匹配项并插入表中,其列都是这些 DNA 字母表的所有可能组合(4^k;“k”是每个匹配项的长度 - K-mer - 并且必须由用户指定)并且行表示在列表中按顺序匹配。

假设我的名单包括 5 名成员:

DNAlst<-list("CAAACTGATTTT","GATGAAAGTAAAATACCG","ATTATGC","TGGA","CGCGCATCAA")

我要套装 k=2 (2-mer) 所以 4^2=16组合可用,包括 AA,AT,AC,AG,TA,TT,...
所以我的表会有 5 rows16 columns .我想计算我的 k-mers 和列表成员之间的匹配数。

我想要的结果: df:
lstMemb AA AT AC AG TA TT TC ...
1 2 1 1 0 0 3 0
2 ...
3
4
5

你能帮我在 R 中实现这个吗?

最佳答案

如果您正在寻找速度,显而易见的解决方案是 stringi 包裹。
stri_count_fixed计数模式的功能。
现在,检查代码和基准测试!

DNAlst<-list("CAAACTGATTTT","GATGAAAGTAAAATACCG","ATTATGC","TGGA","CGCGCATCAA")
dna <- stri_paste(rep(c("A","C","G","T"),each=4),c("A","C","G","T"))
result <- t(sapply(DNAlst, stri_count_fixed,pattern=dna,overlap=TRUE))
colnames(result) <- dna
result
AA AC AG AT CA CC CG CT GA GC GG GT TA TC TG TT
[1,] 2 1 0 1 1 0 0 1 1 0 0 0 0 0 1 3
[2,] 5 1 1 2 0 1 1 0 2 0 0 1 2 0 1 0
[3,] 0 0 0 2 0 0 0 0 0 1 0 0 1 0 1 1
[4,] 0 0 0 0 0 0 0 0 1 0 1 0 0 0 1 0
[5,] 1 0 0 1 2 0 2 0 0 2 0 0 0 1 0 0



fstri <- function(x){
t(sapply(x, stri_count_fixed,dna,T))
}
fbio <- function(x){
t(sapply(x, function(x){x1 <- DNAString(x); oligonucleotideFrequency(x1,2)}))
}

all(fstri(DNAlst)==fbio(DNAlst)) #results are the same
[1] TRUE

longDNA <- sample(DNAlst,100,T)
microbenchmark(fstri(longDNA),fbio(longDNA))
Unit: microseconds
expr min lq mean median uq max neval
fstri(longDNA) 689.378 738.184 825.3014 766.862 793.134 6027.039 100
fbio(longDNA) 118371.825 125552.401 129543.6585 127245.489 129165.711 359335.294 100
127245.489/766.862
## [1] 165.9301

Ca 快 165 倍 :)

关于regex - R中的匹配和计数字符串(DNA的k-mer),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26600735/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com