2017-07-26 11 views
0

greplを使用して自分のデータと一致する正規表現がありますが、その中のサブ式を新しい列に抽出する方法はわかりません。これは、サブ式のいずれかなしに、fooとしてテスト文字列を返して正規表現を使用して文字列のデータフレームからサブ式を抽出する

:私の本当のユースケースで

entryPattern <- "(\\d+)\\s+([[:lower:][:blank:]-]*[A-Z][[:alpha:][:blank:]-]+[A-Z]\\s[[:alpha:][:blank:]]+)\\s+([A-Z]{3})\\s+(\\d{4})\\s+(\\d\\d\\-\\d\\d)\\s+([[:print:][:blank:]]+)\\s+(\\d*\\:?\\d+\\.\\d+)" 
test <- "101  POULET Laure        FRA  1992 25-29  E. M. S. Bron Natation   26.00" 
m <- regexpr(entryPattern, test) 
foo <- regmatches(test, m) 

、私はtestに類似した文字列の多くに作用しています。私は正しくフォーマットされたものを見つけることができるので、パターンは正しいと思います。やることを期待して「メートルは何

rows$isMatch <- grepl(entryPattern, rows$text) 

(すなわちrows$rankrows$namerows$countryなど)の行のデータフレーム内の新しい列としてサブ式を追加です。 事前にアドバイスをいただき、ありがとうございます。

答えて

0

regmatchesは私がしたいことをしないようです。代わりに、@ kent-johnsonによってsuggestedというstringrパッケージが必要です。

library(stringr) 
test <- "101  POULET Laure        FRA  1992 25-29  E. M. S. Bron Natation   26.00" 
entryPattern <- "(\\d+)\\s+([[:lower:][:blank:]-]*[A-Z][[:alpha:][:blank:]-]+[A-Z]\\s[[:alpha:][:blank:]]+?)\\s+([A-Z]{3})\\s+(\\d{4})\\s+(\\d\\d\\-\\d\\d)\\s+([[:print:][:blank:]]+?)\\s+(\\d*\\:?\\d+\\.\\d+)" 
str_match(test, entryPattern)[1,2:8] 

出力:

[1] "101"        
[2] "POULET Laure"     
[3] "FRA"        
[4] "1992"       
[5] "25-29"       
[6] "E. M. S. Bron Natation" 
[7] "26.00" 
関連する問題