Сопоставьте строку (1) с другой строкой (2) и извлеките информацию о положении на основе строки (2) - PullRequest
0 голосов
/ 07 сентября 2018

Я хотел бы сопоставить строку (1) в другой строке (2) и на основе информации о последовательности, содержащейся в строке (1), извлечь информацию о положении на основе строки (2). У меня есть информационный кадр, содержащий пептидные (аминокислотные) последовательности с информацией о дополнительной химической модификации. Это происходит в положениях M или C. Я хотел бы иметь возможность сопоставить эти строки с файлом происхождения, в котором есть все последовательности белков, которые были сопоставлены с использованием алгоритмов спектрального соответствия, и вывести аминокислоту и положение из этого белка.

Я использовал пакет seqinr для чтения в файле .fasta, который содержит 20320 записей, и записи выглядят так:

$`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? Или следует удалить моды и затем найти способ рассчитать относительное положение на основе начального / конечного положений пептида? Какой быстрый способ сделать это, если мне нужно сопоставить несколько сотен / тысяч пептидных последовательностей со списком 20k? Любые предложения будут с благодарностью.

1 Ответ

0 голосов
/ 08 сентября 2018

Я не уверен относительно формата ваших данных.Для моего решения я предполагаю, что у вас есть вектор с белками в верхнем регистре, и я использую формат вашего столбца ptm_probability.Функция проверяет один пептид на наличие всех белков, поэтому достаточно просто использовать lapply или purrr: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"
...