Я создаю табличку из описаний генов в файле FASTA кодирующих белок последовательностей. Вот несколько примеров данных, которые я хочу обработать
seqDescriptions<- c( "lcl|NC_003888.3_cds_NP_624362.1_1 [locus_tag=SCO0001 ][db_xref=GeneID:1095448] [protein=hypothetical protein] [protein_id=NP_624362.1] [location=446..1123] [gbkey=CDS]",
"lcl|NC_003888.3_cds_NP_624363.1_2 [locus_tag=SCO0002] [db_xref=GeneID:1095447] [protein=hypothetical protein] [protein_id=NP_624363.1] [location=1252..3813] [gbkey=CDS]",
"lcl|NC_003888.3_cds_NP_624364.1_3 [locus_tag=SCO0003] [db_xref=GeneID:1095446] [protein=DNA-binding protein] [protein_id=NP_624364.1] [location=3869..6220] [gbkey=CDS]",
"lcl|NC_003888.3_cds_NP_631871.1_4 [locus_tag=SCO0004] [db_xref=GeneID:1095445] [protein=hypothetical protein] [protein_id=NP_631871.1] [location=6226..7173] [gbkey=CDS]")
Я хочу извлечь начальный набор не пробельных символов в один столбец, а затем информацию справа от каждого тега. Определение тегов вручную
tagList <- c("locus_tag", "db_xref", "protein", "protein_id", "location", "gbkey")
Моя цель — получить табличку, которая выглядит так
# A tibble: 4 x 7
name locus_tag db_xref protein ...
<chr> <chr> <chr> <chr> ...
"lcl|NC_003888.3_cds_NP_624362.1_1" "SCO0001" "GeneID:1095448" "hypothetical protein" ...
"lcl|NC_003888.3_cds_NP_624363.1_2" "SCO0002" "GeneID:1095447" "hypothetical protein" ...
Приведенный ниже код работает, но я хотел бы
- Посмотрите, как реализовать это
tidyr
способом. - Назовите столбцы, используя значение
tag
по мере создания, а не постфактум. - Узнайте о любых биоинформационных инструментах, которые могли бы сделать это более непосредственно, например, без необходимости вручную определять теги.
.
fastaID <- sub("^(\\S+) .*", "\\1", seqDescriptions)
seqTags <- sub("^\\S+ (.*)", "\\1", seqDescriptions)
dBase <- tibble(fasta_ID=fastaID)
for(tag in tagsUsed){
tagPattern <- paste0(".*\\[", tag, "=([^]]+).*")## Don't need to escape ']' with '^'
dBase <- tibble::add_column(dBase, sub(tagPattern, "\\1", seqTags), .name_repair="unique" )
}
names(dBase) <- c("fasta_ID", tagsUsed)
tibble(tagsUsed))
Этот подход мне наиболее понятен. Спасибо!