Ищем, как использовать методе- (отдел) () с несколькими разделителями в R (вариант обработки данных ClinVar) - PullRequest
1 голос
/ 22 января 2020

Уважаемое сообщество StackOverflow

Я биолог и работаю с вариантами заболевания / генетики c из официальной базы данных ClinVar. Моя цель - извлечь все имена генов, транскрипты и варианты из этого списка.

ftp: //ftp.ncbi.nlm.nih.gov/pub/clinvar/xml/ClinVarFullRelease_2020-01.xml .gz

Однако ClinVar предлагает необходимую информацию в одном столбце под названием «Имя». (Я разделил некоторые значения с разными результатами, с которыми я хочу иметь дело в примере в таблице ниже:)

                                                           Name ClinicalSignificance
1                                        NG_012236.2:g.11027del           Pathogenic
2                    NM_018077.3(RBM28):c.1052T>C (p.Leu351Pro)           Pathogenic
3                                         NC_012920.1:m.7445A>G           Pathogenic
4                                                     m.7510T>C           Pathogenic
5 NC_000023.11:g.(134493178_134493182)_(134501172_134501176)del           Pathogenic

(есть другой тип данных, однако, поскольку он не содержит информация, в которой я нуждаюсь, я буду рассматривать как мусор)

Я ищу способ разбить столбец «Имя» на 3 других столбца, используя несколько разделителей. Я пытался использовать "|" как часть моего аргумента регулярного выражения для нескольких совпадений. Однако каждый раз, когда он работает, отправляет данные, которые уже были разделены, в столбец справа. Мой код:

ClinVar_Clean <- separate(ClinVar_Clean, Name, into = c("Transcript","gene.var"),sep = "(?<=\\.[0-9]{1,2})[(]|(?<=[0-9]{3,16}\\.[0-9]{1,2}):|(?=[cmpng]\\.)")
ClinVar_Clean <- separate(ClinVar_Clean, gene.var, into = c("Gene","Variant"),sep = "\\):|(?=[cmpng]\\.)")

Мой результат:

    Transcript  Gene   Variant ClinicalSignificance
1  NG_012236.2            <NA>           Pathogenic
2  NM_018077.3 RBM28                     Pathogenic
3  NC_012920.1            <NA>           Pathogenic
4                    m.7510T>C           Pathogenic
5 NC_000023.11            <NA>           Pathogenic

Как должен выглядеть результат:

    Transcript      Gene   Variant                                                  ClinicalSignificance
1  NG_012236.2              g.11027del                                                  Pathogenic
2  NM_018077.3      RBM28   c.1052T>C (p.Leu351Pro)                                     Pathogenic
3  NC_012920.1              m.7445A>G                                                   Pathogenic
4                           m.7510T>C                                                   Pathogenic
5  NC_000023.11             g.(134493178_134493182)_(134501172_134501176)del            Pathogenic

Я также попытался выполнить каждый разделитель отдельно, вместо этого смещения данных вправо, однако это также перезаписывает оставшиеся данные.

Пожалуйста, если кто-нибудь может помочь, приветствует!

1 Ответ

1 голос
/ 22 января 2020

Я пытался сделать это с помощью одного extract / separate, но я не смог придумать, который дал бы точно ожидаемый результат. Итак, вот попытка разбить его на отдельные шаги, используя str_extract из stringr и sub из базы R.

library(dplyr)
library(stringr)

df %>%
  mutate(Transcript = str_extract(Name, ".*(?<=:)"), 
         Gene = str_extract(Transcript, "(?<=\\().*(?=\\))"), 
         Variant = sub(".*:(.*)", "\\1", Name)) %>%
  select(Transcript, Gene, Variant)

#           Transcript  Gene                                          Variant
#1        NG_012236.2:  <NA>                                       g.11027del
#2 NM_018077.3(RBM28): RBM28                           c.1052T>C(p.Leu351Pro)
#3        NC_012920.1:  <NA>                                        m.7445A>G
#4                <NA>  <NA>                                        m.7510T>C
#5       NC_000023.11:  <NA> g.(134493178_134493182)_(134501172_134501176)del

В Transcript мы фиксируем все до двоеточия.

Для Gene мы получаем символ в скобках в Transcript.

Для Variant мы получаем все после двоеточия.

данные

df <- structure(list(Name = structure(c(4L, 5L, 3L, 1L, 2L), .Label = c("m.7510T>C",
"NC_000023.11:g.(134493178_134493182)_(134501172_134501176)del", 
"NC_012920.1:m.7445A>G", "NG_012236.2:g.11027del", 
"NM_018077.3(RBM28):c.1052T>C(p.Leu351Pro)"
), class = "factor"), ClinicalSignificance = structure(c(1L, 
1L, 1L, 1L, 1L), .Label = "Pathogenic", class = "factor")), class = 
"data.frame", row.names = c("1", "2", "3", "4", "5"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...