2015-11-07 65 views
0

我是很新,R和我將不勝感激我想查找一個模式和向量的元素中只返回模式任何答案:)尋找模式,只獲取模式作爲輸出(R)?

比方說,我的矢量是

("7BC-137", "A56_asdf", "M33_T99") 

我所要的輸出是模式的`[0-9] [A-Z] [A-Z]。而只有它的第一次出現

這種載體應然後就

("7BC", "A56", "M33") 

grep("[0-9][A-Z][A-Z]", nameofvector) 

返回整個條目,我不知道該怎麼只返回找到的模式。

非常感謝您提前!

+0

'7BC''如何在預期輸出? –

+0

我有一個有3個元素的角色矢量。 函數應該查找模式[0-9] [A-Z] [A-Z]並返回那些根據模式的元素的那些部分。 謝謝:) – cholz

+0

'7BC'具有數字 - 字符的形式,而其他兩個具有字符 - 數字的字符。你想要什麼作爲最終產出?你在'grep'中使用的模式也不同於你在它上面寫的2行。 –

回答

0

這不適用於R.中的grep(它可能在Linux中,但不在R中)。以下是如何與stringi做到這一點:

library(stringi) 
x <- c("7BC-137", "A56_asdf", "M33_T99") 
out <-stri_extract_first(x, regex="[A-Z][0-9][0-9]") 
out[!is.na(out)] 
#[1] "A56" "M33" 

順便說一句,你的正則表達式模式不匹配「7BC」。你將不得不改變你的正則表達式。

+0

非常感謝:) – cholz

0

stringr包已經很多R.爲正則表達式的東西方便包裝的嘗試:

library(stringr) 
str_extract(c('7AB-2CC-120', '111-3ZC'), '[0-9][A-Z][A-Z]') 

[1] "7AB" "3ZC" 
+0

非常感謝:) – cholz

0

在一個點上,你問「[0-9] [AZ] [ AZ]「,另一點爲」[AZ] [0-9] [0-9]「,所以人們很難理解你想要什麼。如果你只是想在矢量字符項的前三個字母比這將是:

substr(c("7BC-137", "A56_asdf", "M33_T99"), 1,3) 

如果你想與任何啓動項「[0-9] [AZ] [AZ]」,然後添加一個上插入符號「^」,以給grepl所希望的比賽的選擇,然後在模式中使用substr

vec <- c("7BC-137", "A56_asdf", "M33_T99") 
substr(vec[grepl("^[0-9][A-Z][A-Z]", vec)], 1,3) 
# "7BC" .... and the solution for the alternate is obvious. 

如果你想要麼模式,然後使用正則表達式,或符號是"|"

vec <- c("7BC-137", "A56_asdf", "M33_T99") 
substr(vec[grepl("^[0-9][A-Z][A-Z]|^[A-Z][0-9][0-9]", vec)], 1,3) 
#[1] "7BC" "A56" "M33" 
+0

我很抱歉,那是一個錯誤! – cholz

+0

所以其中一個選項是正確的? –

+0

完美地工作,非常感謝你! – cholz

0
string<-c("7BC-137", "A56_asdf", "M33_T99") 
gsub('(_|-).*','',string) 
[1] "7BC" "A56" "M33" 
+0

請給你的答案添加一些解釋。 – Haris