我试图查看基因序列中某些核苷酸的模式。我刚刚完成read.table
以获取它,但我也尝试将其转换为矢量和数据框。
如何搜索模式(例如AACG
)或甚至只搜索单个核苷酸字符?我已经尝试了grep
和%in%
,但这些都返回了null结果。这可能是我忽略的相对简单的事情。
这就是我将数据导入程序的方式。这是一个巨大的档案;所有ACTG
都是20,347封。
data <- read.table(MTHFR.txt)
我一直试图以这种方式将它变成一个角色向量;
data.cv <- as.character(data)
但那会创建一个似乎是行号的列表,而不是核苷酸序列。
数据可用online here。截至目前,这是数据的负责人:
head(data)
V1
1 ATGACGATAAAGGCACGGCCTCCAACGAGACCTGTGGGCACGGCCATGTTGGGGGCGGGGCTTCCGGTCA
2 CCCGCGCCGGTGGTTTCCGCCCTGTAGGCCCGCCTCTCCAGCAACCTGACACCTGCGCCGCGCCCCTTCA
3 CTGCGTTCCCCGCCCCTGCAGCGGCCACAGTGGTGCGGCCGGCGGCCGAGCGTTCTGAGTCACCCGGGAC
4 TGGAGGGTGAGTGACGGCGAGGCCGGGGTCGCCGGGAGGGAGATCCTGGAGCCGGCAAACAACCTCCCGG
5 GGGCAAGGACGTGCTTGTGGGCGGGGAGCGCTGGAGGCCGGCCTGCCTCTCTTCTTGGGGGGGGCTGCCG
6 CCTCCCTTGCGCACCCTTCGCGGGATTAGTGTAACTCCCAATGGCTACCACTTCCAGCGACCGCCAACCC
答案 0 :(得分:3)
对于大多数与序列相关的生物信息学任务,您确实需要熟悉Bioconductor项目中的一些更常见的包。许多常见任务都实现了快速的解决方案。
Biostrings具有DNAString和DNAStringSet等类,用于有效地存储和操作DNA串,以及相应的AA和RNA类。包括用于搜索,反向赞美等的各种功能。听起来您已经导入了数据,但另一种方法是使用readDNAStringSet()
功能。
library(Biostrings)
data <- 'ATGACGATAAAGGCACGGCCTCCAACGAGACCTGTGGGCACGGCCATGTTGGGGGCGGGGCTTCC'
dna <- DNAString(data)
matchPattern('GGG', dna)
Views on a 65-letter DNAString subject
subject: ATGACGATAAAGGCACGGCCTCCAACGAGACCTGTGGGCACGGCCATGTTGGGGGCGGGGCTTCC
views:
start end width
[1] 36 38 3 [GGG]
[2] 51 53 3 [GGG]
[3] 52 54 3 [GGG]
[4] 53 55 3 [GGG]
[5] 57 59 3 [GGG]
[6] 58 60 3 [GGG]
countPattern('GGG', dna)
[1] 6
countPattern('GGA', reverseComplement(dna)) #number of occurrances of 'TCC' in forward strand
[1] 2
答案 1 :(得分:2)
我提出了一个解决方案,使用biopython来读取序列并获得它的反向补码,然后使用简单的算法来获得一个简单的已知k-mer的位置(如果你想要更复杂的东西,biopython具有{{{ 3}})。
从文件中读取序列(假设你有fasta格式):
from Bio import SeqIO
seq_record = SeqIO.read("my_sequence.fa", format="fasta")
制作正向和反向补码的大写(以防万一)版本:
fwd = str(seq_record.seq.upper())
rev = str(seq_record.seq.reverse_complement().upper())
找到模式发生的位置(位置将在0基坐标中):
pattern = "ACTG"
k = len(pattern)
positions_in_fwd = [i for i in range(1 + len(fwd) - k) if fwd[i:i+k] == pattern]
positions_in_rev = [i for i in range(1 + len(rev) - k) if rev[i:i+k] == pattern]
(根据你给出的序列和模式,我在序列中找到24个位置,在逆序补码中找到20个位置。)
答案 2 :(得分:1)
&#34;寻找某些模式&#34;有点模糊。你想提取模式吗?您是否试图找出它在文本中出现的间隔?我将尝试假设两者,但添加任何可以帮助指定目标的内容。
library(stringi)
library(magrittr)
# Data from site you provided was stored to "t.txt" on
# my machine so starting there
a <- readLines('t.txt')
> summary(a)
Length Class Mode
292 character character
> head(a,2)
[1] "GTCAAGTTTTTTTGTTTATTTTTGAGACAGAGTCTGGCTCAATTGCCCAGGCTGAAGCAGAGGAGTGATC"
[2] "TCAGCTCACTGCAACCTCTGCCTCCCGGGTTCAAGTGATTCTCCCGCCTCAGCTTCCTGAGTAGCTGGGA"
> sum(nchar(a))
[1] 20374
> aa <- stri_extract_all_regex(a, 'AACG',
omit_no_match = F, simplify = T) %>%
unlist %>% as.character() %>% (function(x)x[!is.na(x)])
> aa
[1] "AACG" "AACG" "AACG" "AACG" "AACG" "AACG" "AACG" "AACG"
[9] "AACG" "AACG" "AACG" "AACG" "AACG" "AACG" "AACG" "AACG"
[17] "AACG"
a_flat <- paste0(a, collapse = "")
bb <- as.data.frame(stri_locate_all_regex(a_flat, "AACG")[[1]])
> bb
start end
1 807 810
2 1244 1247
3 1748 1751
4 1791 1794
5 2306 2309
6 3560 3563
7 4217 4220
8 4927 4930
9 6504 6507
10 8668 8671
11 9827 9830
12 10333 10336
13 11446 11449
14 12779 12782
15 13619 13622
16 16604 16607
17 16659 16662
18 19200 19203
19 20181 20184
20 20228 20231
> sapply(1:nrow(bb), function(i){
stri_sub(a_flat, bb[i,'start'], bb[i,'end'])
})
[1] "AACG" "AACG" "AACG" "AACG" "AACG" "AACG" "AACG" "AACG"
[9] "AACG" "AACG" "AACG" "AACG" "AACG" "AACG" "AACG" "AACG"
[17] "AACG" "AACG" "AACG" "AACG"