Как разбить строковый столбец на несколько точек в r? - PullRequest
3 голосов
/ 07 мая 2020

У меня есть генети c набор данных с идентификаторами вариантов гена:

VARIANT_ID
01_1254436_A_G_1
02_2254436_A_G_1 
03_3255436_A_G_1 
10_10344745_A_G_1 
11_11256437_A_G_1 
11_11343426_A_G_1 
12_12222431_A_G_1
14_14200436_A_G_1 
15_15256789_A_G_1 

Я хочу создать новый столбец, содержащий часть этих данных с первым _ и последним _, так что смотрите чтобы вывести это:

VARIANT_ID           newcol 
01_1254436_A_G_1     1254436_A_G
02_2254436_A_G_1     2254436_A_G
03_3255436_A_G_1     3255436_A_G
10_10344745_A_G_1    10344745_A_G
11_11256437_A_G_1    11256437_A_G
11_11343426_A_G_1    11343426_A_G
12_12222431_A_G_1    12222431_A_G
14_14200436_A_G_1    14200436_A_G
15_15256789_A_G_1    15256789_A_G

Мне не удалось найти аналогичный вопрос в R, поэтому не знаю, как подойти к этому, я пробовал с str_split_fixed(), но это не работает, приветствуется любая помощь по поводу того, какие функции попробовать

Входные данные:

dput(df)
structure(list(VARIANT_ID = c("01_1254436_A_G_1", "02_2254436_A_G_1", 
"03_3255436_A_G_1", "10_10344745_A_G_1", "11_11256437_A_G_1", 
"11_11343426_A_G_1", "12_12222431_A_G_1", "14_14200436_A_G_1", 
"15_15256789_A_G_1")), row.names = c(NA, -9L), class = c("data.table", 
"data.frame"))

Ответы [ 2 ]

3 голосов
/ 07 мая 2020

Мы можем использовать простой RegEx для разделения:

 library(dplyr)
 df %>% 
  mutate(split_string = stringr::str_replace_all(VARIANT_ID,"^\\d{1,}_|_\\d+$",""))

Или:

df %>% 
       mutate(split_string = stringr::str_replace_all(VARIANT_ID,
"^\\d{1,}_(?=\\d{2,})|_\\d$", ""))

Результат:

     VARIANT_ID split_string
1:  01_1254436_A_G_1  1254436_A_G
2:  02_2254436_A_G_1  2254436_A_G
3:  03_3255436_A_G_1  3255436_A_G
4: 10_10344745_A_G_1 10344745_A_G
5: 11_11256437_A_G_1 11256437_A_G
6: 11_11343426_A_G_1 11343426_A_G
7: 12_12222431_A_G_1 12222431_A_G
8: 14_14200436_A_G_1 14200436_A_G
9: 15_15256789_A_G_1 15256789_A_G
1 голос
/ 07 мая 2020

Вариант с extract

library(tidyr)
extract(df, VARIANT_ID, into = 'newcol', '^\\d+_(.*)_\\d+$', remove = FALSE)
...