【问题标题】:Match string(1) within another string(2) and extract position information based on string(2)在另一个字符串(2)中匹配字符串(1)并根据字符串(2)提取位置信息
【发布时间】:2018-09-07 17:27:54
【问题描述】:

我想在另一个字符串(2)中匹配一个字符串(1),并根据字符串(1)中包含的序列信息,提取基于字符串(2)的位置信息。我有一个包含肽(氨基酸)序列的数据框,其中包含附加化学修饰的信息。这些发生在 M 或 C 位置。我希望能够将这些字符串与包含使用光谱匹配算法匹配的所有蛋白质序列的原始文件进行匹配,并输出该蛋白质的氨基酸和位置。

我使用seqinr 包读取了一个包含 20320 个条目的 .fasta 文件,这些条目如下所示:

$`sp|Q9Y478|AAKB1_HUMAN` [1]"MGNTSSERAALERHGGHKTPRRDSSGGTKDGDRPKILMDSPEDADLFHSEEIKAPEKEEFLAWQHDLEVNDKAPAQARPTVFRWTGGGKEVYLSGSFNNWSKLPLTRSHNNFVAILDLPEGEHQYKFFVDGQWTHDPSEPIVTSQLGTVNNIIQVKKTDFEVFDALMVDSQKCSDVSELSSSPPGPYHQEPYVCKPEERFRAPPILPPHLLQVILNKDTGISCDPALLPEPNHVMLNHLYALSIKDGVMVLSATHRYKKKYVTTLLYKPI"

我有一个包含肽列表的单独数据框,例如:

           ptm_probability                    ptm_peptide            protein_ID protein_description
1 C(1.000)SDFTEEIC(1.000)R K.C[478.99]SDFTEEIC[478.99]R.R sp|P50213|IDH3A_HUMAN Isocitrate dehydrogenase [NAD] subunit alpha, mitochondrial OS=Homo sapiens GN=IDH3A PE=1 SV=1

ptm_probability 中的氨基酸序列显示了修改存在的得分和可能性。 ptm_peptide中的序列有"."表示的序列前后的氨基酸,而修饰包含在括号[478.99]中,修饰可以包含不同的数字。

理想情况下,我希望输出包含一列肽列表,其中显示氨基酸单字母代码,后跟蛋白质中的数字位置:

position
C32
C16, C20

哪些软件包/功能可以让我做到这一点?我可以尝试按原样匹配序列并发出命令以忽略修改[478.99] 以适应fasta 文件当前的格式吗?或者应该剥离 mods 然后想出一种基于肽的开始/结束位置计算相对位置的方法?如果我必须将数百/数千个肽序列与 20k 列表进行匹配,那么有什么快速方法可以做到这一点?任何建议将不胜感激。

【问题讨论】:

    标签: r string match bioconductor


    【解决方案1】:

    我不确定您的数据格式。对于我的解决方案,我假设您有一个带有大写蛋白质的向量,并且我使用您的ptm_probability 列的格式。该函数针对所有蛋白质检查一个肽段,使用lapplypurrr:map 对所有肽段运行它应该是相当直接的。

    我的解决方案基本上是将修饰的氨基酸转换为小写,然后寻找 蛋白质序列中小写字母的位置。它返回一个列表,其中每个 蛋白质有一个带有修饰氨基酸及其位置的特征向量。

    数据:

    proteins <-c("PRQTEINCSDFTEEICRPRQTEIN",
                 "SOMEPRQTEINCSDFTEEICRQTHER",
                 "PRQTEINPRQTEIN")
    
    peptide <- c("C(1.000)SDFTEEIC(1.000)R")
    

    功能:

    library(stringi)
    library(purrr)
    
    find_mods <- function(proteins, peptide){
    
      # first convert the amino acid with the modificiation
      # (prior to the opening parenthesis) to lowercase
      peptide <- gsub("(.)(?=\\()", "\\L\\1", peptide, perl = TRUE)
    
      # strip everything that is not a letter from the peptide string
      peptide <- gsub("[^[:alpha:]]", "", peptide)
    
      # do a case insensitive matching of the peptide sequence in the protein
      # and replace that occurrence with the peptide sequence. Now the modified
      # amino acids in the protein are in lowercase
      pattern <- paste0("(?i)", peptide)
      proteins <- gsub(pattern, peptide, proteins, perl = TRUE)
    
      # Find the lowercase letters in all proteins
      a <- gregexpr("[a-z]", proteins)
      matches_a <- regmatches(proteins, a)
    
      # Find the positions of all lowercase letters in all
      # proteins 
      l1 <- stringi::stri_locate_all(proteins, regex = "[a-z]")
    
      #combine letter and position of the modifications
      purrr::map2(matches_a,l1, ~ paste0(toupper(.x),.y[,1]) )
      }
    

    输出:

    find_mods(proteins, peptide)
    [[1]]
    [1] "C8"  "C16"
    
    [[2]]
    [1] "C12" "C20"
    
    [[3]]
    [1] "NA"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-17
      • 2013-12-28
      相关资源
      最近更新 更多