2015-12-17 33 views
0

使樣品名稱我有ř簡化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位數字並修改結束。謝謝! –