2015-09-23 2 views
0

мне нужно разделить имена столбцов RefSeq с помощью _, что происходит до того NM без разделения той части, которая находится между NM и числом. Мне нужен вывод, чтобы быть в новом столбце моего ввода.Строка расколу в R в определенном контексте

Пытались что-то вроде: данные

strsplit(as.character(TargetScan$RefSeq),"_") 

> head(TargetScan) 
    Gene   miRNA Site cont.score cont.score.perc 
1 A1CF hsa-let-7a-5p 8mer-1a  -0.051    12 
2 A1CF hsa-let-7b-5p 8mer-1a  -0.051    12 
3 A1CF hsa-let-7c-5p 8mer-1a  -0.051    12 
4 A1CF hsa-let-7d-5p 8mer-1a  -0.062    12 
5 A1CF hsa-let-7e-5p 8mer-1a  -0.051    12 
6 A1CF hsa-let-7f-5p 8mer-1a  -0.051    12 
                   RefSeq 
1 NM_001198820_NM_014576_NM_138932_NM_001198819_NM_001198818_NM_138933 
2 NM_001198820_NM_014576_NM_138932_NM_001198819_NM_001198818_NM_138933 
3 NM_001198820_NM_014576_NM_138932_NM_001198819_NM_001198818_NM_138933 
4 NM_001198820_NM_014576_NM_138932_NM_001198819_NM_001198818_NM_138933 
5 NM_001198820_NM_014576_NM_138932_NM_001198819_NM_001198818_NM_138933 
6 NM_001198820_NM_014576_NM_138932_NM_001198819_NM_001198818_NM_138933 

из

> head(TargetScan) 
    Gene   miRNA Site cont.score cont.score.perc 
1 A1CF hsa-let-7a-5p 8mer-1a  -0.051    12 
2 A1CF hsa-let-7b-5p 8mer-1a  -0.051    12 
3 A1CF hsa-let-7c-5p 8mer-1a  -0.051    12 
4 A1CF hsa-let-7d-5p 8mer-1a  -0.062    12 
5 A1CF hsa-let-7e-5p 8mer-1a  -0.051    12 
6 A1CF hsa-let-7f-5p 8mer-1a  -0.051    12 
    new1   new2  new3  new4   new5   new6       
1 NM_001198820 NM_014576 NM_138932 NM_001198819 NM_001198818 NM_138933 
2 NM_001198820 NM_014576 NM_138932 NM_001198819 NM_001198818 NM_138933 
3 NM_001198820 NM_014576 NM_138932 NM_001198819 NM_001198818 NM_138933 
4 NM_001198820 NM_014576 NM_138932 NM_001198819 NM_001198818 NM_138933 
5 NM_001198820 NM_014576 NM_138932 NM_001198819 NM_001198818 NM_138933 
6 NM_001198820 NM_014576 NM_138932 NM_001198819 NM_001198818 NM_138933 
+0

Быстрое исправление, воспользовавшись очевидным рисунком у вас есть есть: 'strsplit (GSUB ("_ NM", "NM.", Х), "[.]")'. Замените «_», который вы хотите наплевать на «.». и разделить на ".". – AntoniosK

ответ

0

Я хотел бы попробовать заменить подчеркивание перед тем NM использованием gsub и затем вызвать strsplit на значения, то например:

strsplit(gsub('_NM', ',NM', s), ',') 
3
strsplit(x, "(?<=\\d)_", perl=T)[[1]] 
#[1] "NM_001198820" "NM_014576" "NM_138932" "NM_001198819" 
#[5] "NM_001198818" "NM_138933" 

Этот подход использует Двойник позади. Следуя шаблону строки, "(?<=\\d)_", мы сопоставляем знак подчеркивания, которому предшествует число.

Облаченный в функции для желаемого выхода:

library(tidyr) 
separate(TargetScan, RefSeq, paste0("new", 1:6), "(?<=\\d)_") 
# Gene   miRNA Site cont.score cont.score.perc   new1  new2 
# 1 A1CF hsa-let-7a-5p 8mer-1a  -0.051    12 NM_001198820 NM_014576 
# 2 A1CF hsa-let-7b-5p 8mer-1a  -0.051    12 NM_001198820 NM_014576 
# 3 A1CF hsa-let-7c-5p 8mer-1a  -0.051    12 NM_001198820 NM_014576 
# 4 A1CF hsa-let-7d-5p 8mer-1a  -0.062    12 NM_001198820 NM_014576 
# 5 A1CF hsa-let-7e-5p 8mer-1a  -0.051    12 NM_001198820 NM_014576 
# 6 A1CF hsa-let-7f-5p 8mer-1a  -0.051    12 NM_001198820 NM_014576 
#  new3   new4   new5  new6 
# 1 NM_138932 NM_001198819 NM_001198818 NM_138933 
# 2 NM_138932 NM_001198819 NM_001198818 NM_138933 
# 3 NM_138932 NM_001198819 NM_001198818 NM_138933 
# 4 NM_138932 NM_001198819 NM_001198818 NM_138933 
# 5 NM_138932 NM_001198819 NM_001198818 NM_138933 
# 6 NM_138932 NM_001198819 NM_001198818 NM_138933 
0

Используйте регулярное выражение, чтобы соответствовать текст, который вы хотите, и сделать это я предлагаю stringr::str_match_all.

library(stringr) 
s <- c('NM_001198820_NM_014576_NM_138932_NM_001198819_NM_001198818_NM_138933', 
     'NM_001198820_NM_014576_NM_138932_NM_001198819_NM_001198818_NM_138933') 
str_match_all(s, '([A-Za-z]{2}_\\d+)_?') 

дает

[[1]] 
    [,1]   [,2]   
[1,] "NM_001198820_" "NM_001198820" 
[2,] "NM_014576_" "NM_014576" 
[3,] "NM_138932_" "NM_138932" 
[4,] "NM_001198819_" "NM_001198819" 
[5,] "NM_001198818_" "NM_001198818" 
[6,] "NM_138933"  "NM_138933" 

[[2]] 
    [,1]   [,2]   
[1,] "NM_001198820_" "NM_001198820" 
[2,] "NM_014576_" "NM_014576" 
[3,] "NM_138932_" "NM_138932" 
[4,] "NM_001198819_" "NM_001198819" 
[5,] "NM_001198818_" "NM_001198818" 
[6,] "NM_138933"  "NM_138933" 

После этого вы можете организовать данные в возвращающей список в data.frame. Обратите внимание, что во втором столбце указана необходимая информация.

Смежные вопросы