2015-12-17 3 views
0

У меня есть список имен образцовR упростить GSUB(), чтобы сделать имена образцов из более длинной строки

name <- c("GOM_13M_TB-01_S.HM (Q)30", 
"GOM_13M_PS-06_S.HM (Q)30", 
"GOM_13O_PS-06_3C_HM (Q)30", 
"GOM_14O_GI-02_B3 (Q)30", 
"GOM_14O_PS-03_A3 (Q)30", 
"GOM_12J_GI-01_MS (Q)30")' 

, которые должны быть упрощены в

13M_TB-01_MS (MS for consistency) 
13M_PS-06_MS 
13O_PS-06_3C (I am not too concerned about the last 2 digits order) 
14O_GI-02_B3 
14O_PS-03_A3 
12J_GI-01_MS 

Я попытался следующие виды использования GSUB(), но я пытаюсь упростить решение.

x <- gsub("GOM_", "", name) 
x <- gsub("\\(Q\\)30", "", x) 
x <- gsub("_S", "_MS", x) 
x <- gsub(".HM", "", x) 

Любые предложения?

+0

Не уверен, почему downvote здесь. Имеются примеры данных, попытка подхода, ожидаемый результат. Все очень хорошо для первого вопроса на SO .... – A5C1D2H2I1M1N2O1R2T1

ответ

3

Может быть, вы можете попробовать что-то вроде следующего:

gsub("GOM_(.*) .*", "\\1", gsub("S.HM", "MS", name)) 
# [1] "13M_TB-01_MS" "13M_PS-06_MS" "13O_PS-06_3C_HM" "14O_GI-02_B3" 
# [5] "14O_PS-03_A3" "12J_GI-01_MS" 

Или, может быть:

## I think this matches what you're expecting... 
substr(gsub("S.HM", "MS", name), 5, 16) 
# [1] "13M_TB-01_MS" "13M_PS-06_MS" "13O_PS-06_3C" "14O_GI-02_B3" 
# [5] "14O_PS-03_A3" "12J_GI-01_MS" 
+0

Как добраться, [3] все еще есть некоторые проблемы, но это намного ближе. Благодарю. –

+0

@GeochemB, см. Обновление, использующее 'substr'. – A5C1D2H2I1M1N2O1R2T1

+0

Это здорово, я пытался выяснить, какой код должен был бы исключить первые 4 цифры в строке и изменить конец. Благодаря! –

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

  • Нет связанных вопросов^_^