R: Отформатируйте столбцы фрейма данных, чтобы они были совместимы с таблицами поиска.

У меня есть два data.frames с шатким форматированием. Один из них — большая ссылка, а другой — подмножество, которое я хотел бы найти для извлечения дополнительных данных из ссылки, но форматирование затруднено.

Меньшее подмножество выглядит так:

> head(lookup, n = 2)

      gene_id class_code nearest_ref_id
1 XLOC_001184       <NA>           <NA>
2 XLOC_001225       <NA>           <NA>


> gene_short_name
1      ORF%20Transcript_11308%7Cg.37058%20Transcript_11308%7Cm.37058%20type%3Acomplete%20len%3A195%20%28%2B%29
2 ORF%20Transcript_11347%7Cg.37236%20Transcript_11347%7Cm.37236%20type%3A5prime_partial%20len%3A87%20%28%2B%29

                    locus length coverage
1 Transcript_11308:0-1727     NA       NA
2 Transcript_11347:0-1584     NA       NA

И ссылка выглядит следующим образом (Примечание: некоторые последовательности были удалены вручную, чтобы они не были слишком длинными для отображения здесь):

> head(refRna, n=2)
             seq_names   sequences
1 Transcript_0 len=550   GTTTTATTTGTTGTTGTTGTTGTTTTTATATGTA
2 Transcript_1 len=760   GACCACACCACTCGTCTGAATTCTCGATGTGGAA

В reference$seq_names есть пробел, : в lookup$locus с некоторыми дополнительными цифрами после него.

Некоторые из reference$seq_names имеют дополнительную информацию с большим количеством пробелов. Например:

4        Transcript_3 len=440 CDS=1-439 exon=0-440 five_prime_UTR=439-440 gene=0-440 mRNA=0-440 three_prime_UTR=0-1

Бит Transcript_1234 является уникальным идентификатором.

В конечном итоге я хотел бы получить reference$sequences для каждого lookup$locus и добавить его в новый столбец lookup$sequence или создать новый фрейм данных только с битами XLOC_1234, Transcript_1234 и соответствующей последовательностью. Ценю любые советы.


person user974887    schedule 11.01.2018    source источник


Ответы (1)


Основываясь на том, что вы предоставили, здесь я даю вам несколько советов / стратегий для решения вашей проблемы. Предполагается, что ваши типы данных data.frame не являются специализированными классами, такими как GenomicRanges. (Используйте функцию class для двойной проверки).

  • Во-первых, вам нужно будет очистить столбец reference$seq_names, удалив лишнее пространство, как вы упомянули. Полезными будут такие функции, как gsub и str_replace. См. эту запись StackOverflow.
  • Точно так же необходимо очистить lookup data.frame. Чтобы отбрасывать тексты/цифры после :, функция gsub — ваш друг; вы можете комбинировать его с регулярным выражением, чтобы отбрасывать все после интересующего символа. Например:

    lookup$locus ‹- gsub("\:.*", "", lookup$locus) # заменяет все после : пустой строкой

  • Упомянутый вами процесс «поиска» известен как запрос. Вам понадобится столбец key, чтобы определить и сопоставить меньшее подмножество с эталонным набором данных. Ключ в вашем reference выглядит как идентификатор транскрипта, который вам нужно будет извлечь из более длинной строки. Основываясь на том, что вы предоставили, одна из стратегий состоит в том, чтобы удалить все после пробела и сохранить как новый столбец. Например:

    reference$NEW_COLUMN ‹- gsub("\ .*", "", reference$seq_names)

  • Чтобы выполнить последнюю задачу, вы можете выполнить операцию соединения (см. эту страницу Википедии для фона). В R мы используем функцию merge(DATAFRAME1, DATAFRAME2, by=KEY).

person David C.    schedule 12.01.2018