2016-11-08 9 views
0

ある単語が後に続く単語を抽出しようとしています。この例では、例えば、私は、次の単語を抽出しようとしています「AB」文章から単語を抽出するR

x = c("So much fun - AB22148",      
"AC33648 does whatever",       
"I know -AB11025 Failed",     
"Nothing stalled - AB16228",   
"Unable to do fdS2083D - Ab26604") 

Num = character(0) 
for (i in 1:length(x)) { 
    y = unlist(strsplit(x[i]," ")) 
    Num[i] = grep("AB",y, perl = T, value = T, ignore.case = T) 
    } 

あり問題のカップル(あなたはおそらく言うことができるよう)です。1.「AB」は存在しない場合、私はエラーを取得しますNumはゼロの長さを取ることができないからです。 2.私がそれを克服すると(ACをABに置き換えるなどして)、5番目のエントリは「Ab26604」ではなく「unable」を返します。

私が探しているものは次のとおりです。1.ループなしで実行できるか(おそらくapply関数の1つを使用して)2. 3番目と5番目のケースでどのようにシナリオを説明しますか?すべての助けを

Num (current output) 
    [1] "AB22148" " " "-AB11025" "AB16228" "Unable" 

    Num (required output) 
[1] "AB22148" " " "AB11025" "AB16228" "Ab26604" 

感謝を[私は(私は次のステップで、このの世話をすることができますが、それは同時に行うことができるかどうか迷った)」-'signを削除するようになります]。ほんとうにありがとう。親切にあなたは追加の説明が必要なら、私に知らせて

あなたは次のように行うことができます
+1

'GSUB( '(I)\\ B(AB \\ S +)|?'、 '\\ 1'、X、perlの= TRUE)' – rawr

+0

あなたは答えを投稿して説明しなきゃ@rawr魔術師。特に、最後に '| .'があります。 –

答えて

1

:あなたに与え

require(stringr) 
str_extract(x, regex("AB[:alnum:]{5}", ignore_case = TRUE)) 

を:あなたはあなたができるNA" "を交換したい場合は

"AB22148" NA  "AB11025" "AB16228" "Ab26604" 

do:

str_replace_na(tmp, " ") # assuming tmp is the result from above 

あなたには:

"AB22148" " "  "AB11025" "AB16228" "Ab26604" 
関連する問題