如果我想在一个序列中找到两种不同的模式,我该怎么做 例如:
seq="ATGCAAAGGT"
模式
pattern=c("ATGC","AAGG")
我怎么能在序列中同时找到这两种模式?
我也想找到这些模式的位置,例如模式位置是1,4和5,8。
任何人都可以帮我吗?
答案 0 :(得分:3)
让我们说你的序列文件只是序列的载体:
seq.file <- c('ATGCAAAGGT','ATGCTAAGGT','NOTINTHISONE')
您可以搜索这两个主题,然后返回一个真/假向量,使用以下单行标识两者是否存在:
grepl('ATGC', seq.file) & grepl('AAGG', seq.file)
[1] TRUE TRUE FALSE
让我们说序列向量是数据框d
中的一列,它还包含一列ID值:
id <- c('s1','s2','s3')
d <- data.frame(id,seq.file)
colnames(d) <- c('id','sequence')
您可以在此数据框d
附加一列,用于标识给定序列是否与此单行匹配:
d$match <- grepl('ATGC',d$sequence) & grepl('AAGG', d$sequence)
> print(d)
id sequence match
1 s1 ATGCAAAGGT TRUE
2 s2 ATGCTAAGGT TRUE
3 s3 NOTINTHISONE FALSE
以下for循环可以返回序列中每个模式的位置列表:
require(stringr)
for(i in 1: length(d$sequence)){
out <- str_locate_all(d$sequence[i], pattern)
first <- c(out[[1]])
first.o <- paste(first[1],first[2],sep=',')
second <- c(out[[2]])
second.o <- paste(second[1],second[2], sep=',')
print(c(first.o, second.o))
}
[1] "1,4" "6,9"
[1] "1,4" "6,9"
[1] "NA,NA" "NA,NA"
答案 1 :(得分:2)
您可以尝试使用stringr
库执行以下操作:
seq = "ATGCAAAGGT"
library(stringr)
str_extract_all(seq, 'ATGC|AAGG')
[[1]]
[1] "ATGC" "AAGG"
如果不具体了解您正在寻找的输出,这是我现在能提供的最佳效果。
答案 2 :(得分:1)
如何使用stringr
查找开始和结束位置:
library(stringr)
seq <- "ATGCAAAGGT"
pattern <- c("ATGC","AAGG")
str_locate_all(seq, pattern)
#[[1]]
# start end
#[1,] 1 4
#
#[[2]]
# start end
#[1,] 6 9