R 在DNA序列中搜索字符串

R 在DNA序列中搜索字符串,r,regex,vector,character,bioinformatics,R,Regex,Vector,Character,Bioinformatics,我试图研究基因序列中的某些核苷酸模式。我刚刚做了read.table来获取它,但我也尝试将它转换为向量和数据帧 如何搜索一个模式(例如AACG),甚至是一个单核苷酸字符?我在%中尝试了grep和%但返回的结果为空。我可能忽略了一些相对简单的东西 我就是这样把数据输入程序的。这是一个巨大的文件;20347个字母,全部ACTG data <- read.table(MTHFR.txt) 对于大多数与序列相关的生物信息学任务,您确实需要熟悉Bioconductor项目中一些更常见的软件包。许

我试图研究基因序列中的某些核苷酸模式。我刚刚做了
read.table
来获取它,但我也尝试将它转换为向量和数据帧

如何搜索一个模式(例如
AACG
),甚至是一个单核苷酸字符?我在%中尝试了
grep
%但返回的结果为空。我可能忽略了一些相对简单的东西

我就是这样把数据输入程序的。这是一个巨大的文件;20347个字母,全部
ACTG

data <- read.table(MTHFR.txt) 

对于大多数与序列相关的生物信息学任务,您确实需要熟悉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
库(生物串)

数据对于大多数与序列相关的生物信息学任务,您确实需要熟悉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
库(生物串)
数据“寻找特定模式”有点含糊不清。你是在试图提取模式吗?你是否在试图找出它在文本中出现的时间间隔?我将尝试假设这两种情况,但添加任何可以帮助指定目标的内容

library(stringi)
library(magrittr)
# Data from site you provided was stored to "t.txt" on
# my machine so starting there
a <- readLines('t.txt')
查看数据集的头部 现在我们有了数据,让我们提取“AACG”模式 我们可以使用这些位置将扁平的字符串分割成我们想要的 希望这能给你一点启示。“寻找特定的模式”有点模糊。你是在试图提取模式吗?你是否在试图找出它在文本中出现的时间间隔?我将尝试假设这两种情况,但添加任何可以帮助指定目标的内容

library(stringi)
library(magrittr)
# Data from site you provided was stored to "t.txt" on
# my machine so starting there
a <- readLines('t.txt')
查看数据集的头部 现在我们有了数据,让我们提取“AACG”模式 我们可以使用这些位置将扁平的字符串分割成我们想要的
希望这能为您提供一点启示我提出了一个解决方案,使用biopython读取序列并获得其反向补码,然后使用一个简单的算法来获得一个简单的已知k-mer的位置(如果您想要更复杂的东西,biopython可以为您提供功能)

从文件中读取序列(假设文件为fasta格式):

制作正反补语的大写(以防万一)版本:

fwd = str(seq_record.seq.upper())
rev = str(seq_record.seq.reverse_complement().upper())
查找图案出现的位置(位置将以0为基准坐标):


(根据您给出的序列和模式,我在序列中找到了模式的24个位置,在其反向补码中找到了20个位置。)

我提出了一个解决方案,使用biopython读取序列并获得其反向补码,然后使用简单的算法获得一个简单已知k-mer的位置(如果你想要更复杂的东西,biopython可以为你提供功能)

从文件中读取序列(假设文件为fasta格式):

制作正反补语的大写(以防万一)版本:

fwd = str(seq_record.seq.upper())
rev = str(seq_record.seq.reverse_complement().upper())
查找图案出现的位置(位置将以0为基准坐标):


(根据您给出的序列和模式,我在序列中找到了模式的24个位置,在其反向补码中找到了20个位置。)

您不能将
作为.character(数据)
-您需要将
作为.character(数据$variable)执行
预期的输出是什么?您在下载数据时选择了什么格式?我在您提到的页面上看到了很多选择。尽管我目前对R的有限经验和对python的长期经验相比,我认为我更愿意使用python(可能与biopython一起使用)在读取序列和搜索其中的模式时使用R。您不能将
作为.character(数据)
-您需要将
作为.character(数据$variable)执行
预期的输出是什么?您在下载数据时选择了什么格式?我在您提到的页面上看到了很多选择。尽管我目前对R的有限经验和对python的长期经验相比,我认为我更愿意使用python(可能与biopython一起使用)用于读取序列并搜索其中的模式。
> 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"
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())
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]