Как получить идентификационные коды из файла FASTA, используя R - PullRequest
1 голос
/ 07 апреля 2020

Имея файл fasta, содержащий последовательности, подобные приведенным ниже двум, я хотел бы взять только идентификационные коды и сохранить их в новом файле .txt.

>sp|P01920|DQB1_HUMAN HLA class II histocompatibility antigen, DQ beta 1 chain OS=Homo sapiens OX=9606 GN=HLA-DQB1 PE=1 SV=2
MSWKKALRIPGGLRAATVTLMLAMLSTPVAEGRDSPEDFVYQFKAMCYFTNGTERVRYVT
RYIYNREEYARFDSDVEVYRAVTPLGPPDAEYWNSQKEVLERTRAELDTVCRHNYQLELR
TTLQRRVEPTVTISPSRTEALNHHNLLVCSVTDFYPAQIKVRWFRNDQEETTGVVSTPLI
RNGDWTFQILVMLEMTPQHGDVYTCHVEHPSLQNPITVEWRAQSESAQSKMLSGIGGFVL
GLIFLGLGLIIHHRSQKGLLH

>sp|P18440|ARY1_HUMAN Arylamine N-acetyltransferase 1 OS=Homo sapiens OX=9606 GN=NAT1 PE=1 SV=2
MDIEAYLERIGYKKSRNKLDLETLTDILQHQIRAVPFENLNIHCGDAMDLGLEAIFDQVV
RRNRGGWCLQVNHLLYWALTTIGFETTMLGGYVYSTPAKKYSTGMIHLLLQVTIDGRNYI
VDAGFGRSYQMWQPLELISGKDQPQVPCVFRLTEENGFWYLDQIRREQYIPNEEFLHSDL
LEDSKYRKIYSFTLKPRTIEDFESMNTYLQTSPSSVFTSKSFCSLQTPDGVHCLVGFTLT
HRRFNYKDNTDLIEFKTLSEEEIEKVLKNIFNISLQRKLVPKHGDRFFTI

Новый файл .txt будет иметь идентификационные коды

>P01920
>P18440

каждый в отдельном ряду

Есть опыт? Спасибо

Ответы [ 3 ]

1 голос
/ 07 апреля 2020

Допустим, ваш файл выглядит следующим образом:

test = c(">sp|Q9DFI0|DMT3B_DANRE Doublesex- and mab-3-related transcription factor 3b (Fragment) OS=Danio rerio OX=7955 GN=dmrt3b PE=3 SV=1", 
"MLSWLKGHKRYCRFKDCTCEKCILIIERQRV", ">sp|P83238|OSTCN_DANRE Osteocalcin (Fragment) OS=Danio rerio OX=7955 GN=bglap PE=1 SV=1", 
"AGTAXGDLTPFQLESLREVCEVNLACEHMADTXGIVAAYTAYYGY", ">sp|Q9W7M8|TYB_DANRE Thymosin beta OS=Danio rerio OX=7955 GN=tmsb PE=3 SV=3", 
"MADKPNMTEITSFDKTKLRKTETQEKNPLPTKETIEQERQGESTP")

writeLines(test,"./test.fasta")

Вы можете сделать:

library(Biostrings)
fa = readAAStringSet("test.fasta")
want_names = sapply(strsplit(names(fa),"\\|"),"[[",2)
want_names
writeLines(want_names,"names.txt")

Или, если вы не хотите устанавливать пакет:

fa = readLines("test.fasta")
fa = fa[grepl(">",fa)]
want_names = sapply(strsplit(fa,"\\|"),"[[",2)
want_names
[1] "Q9DFI0" "P83238" "Q9W7M8"
1 голос
/ 07 апреля 2020

Предполагая, что в заголовке fasta > следует имя организма , за которым следует имя гена , отделенное | от имени организма и остальная часть строки, вы можете найти ваши идентификаторы генов следующим образом:

fas <- readLines('fasta_file.txt')                  # read fasta file
fas <- fas[!grepl('^$', fas)]                       # rm empty lines
(ids <- gsub('^.+\\|(\\w+)\\|.*$', '>\\1', fas))    # extract IDs
#[1] ">P01920" ">P18440"                            # result
writeLines(ids, 'fasta_ids.txt')                    # write results
1 голос
/ 07 апреля 2020

Мы можем использовать str_extract от stringr. Мы можем использовать регулярное выражение, которое ищет строку alphanumeri c, которой непосредственно предшествует sp|. Это называется взглядом за спину.

library(stringr)
con <- file("test.fasta")
data <- readLines(con = con)
close(con)
IDs <- str_extract(data,"(?<=sp\\|)[[:alnum:]]+")
IDs <- IDs[!is.na(IDs)]
IDs <- paste0(">",IDs)
write.table(data.frame(IDs),file="IDs.txt",row.names = FALSE, col.names=FALSE, quote = FALSE)

Plot

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