Найти частичное перекрытие между последовательностями в двух матрицах - PullRequest
0 голосов
/ 08 мая 2018

Я начну с воспроизводимого примера, и это часть моих реальных данных:

Файл данных 1:

> dput(exp_data)
structure(c("ACLVDGSYHDVDSSVLAFQLAAR", "AELNQVVR", "AFEPGLLAK", 
"AFSVFLFNSK", "AFYEFQQR", "AGEPLYVLLCCWVAAVGAGLLK", "AIKDFPHR", 
"AIRIPVVR", "AIVWSGEELGAK", "ALAALQGR", "ALEGIYACCFR", "ANLSSVQIDR", 
"ANLSSVQIDRELK", "ASYTMQLAK", "ATRVEEGGEEENVMAK", "AVELVILPR", 
"AVPLKDYR", "CLAAIEGR", "DIVSEHPER", "DLVDFAEFR", "DLVDFAEFRK", 
"DMIVTNLGAKPLVLQIPIGAEDVFK", "DQSDREVDVTQNR", "DQVSIIPFR", "DQVSIIPFRGDAAEVLLPPSR", 
"DQVTAEDVGIVIPNCLR", "DRVTPDDVATVIPNCLR", "DSILQSIHEPELISAFDTGGAELLYEIR", 
"DSLVQSGAKPELIAAFDTNGAELLYEIR", "DTITGETLSDPENPVVLER", "EDGVMTAELLQR", 
"EGISISHPAR", "EIGGIAISGR", "EILVQHLLVK", "ELHGESEEERVKEEEIK", 
"23", " 8", " 9", "10", " 8", "22", " 8", " 8", "12", " 8", "11", 
"10", "13", " 9", "16", " 9", " 8", " 8", " 9", " 9", "10", "25", 
"13", " 9", "21", "17", "17", "28", "28", "19", "12", "10", "10", 
"10", "17"), .Dim = c(35L, 2L), .Dimnames = list(c("14037", "24071", 
"27989", "31522", "32851", "35458", "49646", "52332", "54727", 
"57052", "61034", "82744", "82797", "104573", "110271", "115602", 
"121061", "133577", "163666", "175488", "175522", "177867", "183262", 
"183690", "183703", "183742", "184949", "186146", "186828", "193019", 
"213233", "222624", "232405", "233822", "244244"), c("Sequence", 
"Length")))

Файл данных 2:

> dput(exp_sel)
structure(c(" 49", " 80", " 45", " 61", " 40", " 45", "107", 
" 75", " 40", " 60", " 43", " 57", " 80", " 51", " 55", " 39", 
"MAMTPVASSSPVSTCRLFRCNLLPDLLPKPLFLSLPKRNRIASCRFTVR", "MAADALRISSSSSGSLVCNLNGSQRRPVLLPLSHRATFLGLPPRASSSSISSSIPQFLGTSRIGLGSSKLSQKKKQFSVF", 
"MSASSLFNLPLIRLRSLALSSSFSSFRFAHRPLSSISPRKLPNFR", "MFSLKSLISSPFTQSTTHGLFTNPITRPVNPLPRTVSFTVTASMIPKRSSANMIPKNPPAR", 
"MQICQTKLNFTFPNPTNPNFCKPKALQWSPPRRISLLPCR", "MVVVTHISTSFHQISPSFFHLRLRNPSTTSSSRPKLDGGFALSIR", 
"MASSSSMQMVHTSRSIAQIGFGVKSQLVSANRTTQSVCFGARSSGIALSSRLHYASPIKQFSGVYATTKHQRTACVKSM", 
"MELSLLRPTTQSLLPSFSKPNLRLAELNQVVRLRC", "MASSSLPLSLPFPLRSLTSTTRSLPFQCSPLFFSIPSSIV", 
"MASLLGTSSSAIWASPSLSSPSSKPSSSPICFRPGKLFGSKLNAGIQIRPKKNRSRYHVS", 
"MALQAADLVDFAEFRRKDAKLNASSSSFKDSSLFGASITDQIKSEHGSSSLRFKREQSLRNLAIRA", 
"MELSLSTSSASPAVLRRQASPLLHKQQVLGVSFASALKPASYTMQLAKSRRPLPRPITC", 
"MFRVTGTLSAASSPAVAAASFSAALRLSITPTLAIASPPHLRWFSKFSRQFLGGRISSLRPRIPSPCPIRLSGFPALKMRA", 
"MLSLTATTLSSSIFTQSKTHGFFNTRPVYRKPFTTITSALIPASNRQAPPK", "MASLLGRSPSSILTCPRISSPSSTSSMSHLCFGPEKLSGRIQFNPKKNRSRYHVS", 
"MAVSPHISPTLSRYKFFSTSVVENPNFSPYRIYSRRRVT"), .Dim = c(16L, 2L), .Dimnames = list(
    c("2", "6", "10", "11", "14", "15", "16", "17", "20", "21", 
    "22", "23", "24", "25", "26", "27"), c("Length", "Sequence"
    )))

Я хотел бы выбрать Sequence из каждой строки в файле данных 1 (exp_data) и попытаться найти, можно ли найти эту конкретную строку в какой-либо строке в столбце Sequence из файла данных 2 (exp_sel).Проблема заключается в том, что эти последовательности не совпадают, и ожидается лишь частичное перекрытие последовательности из файла данных 1 в столбце последовательности из файла данных 2.

Пример вывода:

Последовательность из данныхфайл 1:

AFYEFQQR

Последовательность из файла данных 2:

MAMTPVASSSPV AFYEFQQR NLLPDLLPKPLFLSLPKRNRIASCRFTVR

Есть совпадение, пожалуйста, сохранитеэта строка в exp_data.Если для этой последовательности немногое - удалите эту строку.

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Я думал, что запрос был для табуляции элементов в exp_sel, которые содержали любой из элементов в exp_data:

 exp_sel[ unlist( sapply(exp_data, grep, exp_sel[, "Sequence"])), ]
   Length Sequence                                                            
17 " 75"  "MELSLLRPTTQSLLPSFSKPNLRLAELNQVVRLRC"                               
23 " 57"  "MELSLSTSSASPAVLRRQASPLLHKQQVLGVSFASALKPASYTMQLAKSRRPLPRPITC"       
22 " 43"  "MALQAADLVDFAEFRRKDAKLNASSSSFKDSSLFGASITDQIKSEHGSSSLRFKREQSLRNLAIRA"

Но после перечитывания, кажется, я прочитал это неправильно. Может быть, это было бы полезно в любом случае.

0 голосов
/ 08 мая 2018

Вы могли бы сделать это ...

exp_data[sapply(exp_data[,1], function(x) any(grepl(x, exp_sel[,2]))), ]

       Sequence    Length
24071  "AELNQVVR"  " 8"  
104573 "ASYTMQLAK" " 9"  
175488 "DLVDFAEFR" " 9"  

sapply создает логический вектор, равный TRUE, если любое из значений exp_sel содержит соответствующий элемент exp_data.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...