2016-05-26 12 views
2

私はあなたがこれはそれの一部でしか見ることができるように、この特定の単語

[70] "CSF 5896-6133"               
[71] "CRT 16"                 
[72] "SEEF 54-55"                
[73] "CIF 190-195"                
[74] "DE & /ON CIF 196-222"              
[75] " CRT 17 "                 
[76] " SEEF 56-57"                
[77] "DE & /ON CSF 6134-6725 "             
[78] " SEEF 58-60"                
[79] "CRT 18"                 
[80] " CSF 6726-6837"               
[81] "SEEF 61"                 
[82] " CSF 6840-6926"               
[83] " CIF 223-226"                
[84] "SEEF 62-63"                
[85] " CSF 6927-7065"               
[86] " CIF 226-228"                
[87] "CSF 7066-7185"                
[88] "CSF 7186-7311"                
[89] " CIF 229"                 
[90] " SEEF 66"                 
[91] "CSF 7312-7561"                
[92] " CRT 19"                 
[93] " SEEF 67-68"                
[94] "Final data QAQC done on CSF 1-7561"          
[95] " CIF 1-229"                
[96] " SEEF 1-68 "                
[97] " CRT 1-19"                
[98] "082015-HOBA-G17-1 changed to offPlot based on GIS review of searched  area" 

のように見える文字のリストを持っていない文字ベクトルから全ての単語を削除します。

私はあなたがライン98を見ることができるように、たとえば94-98からのセクションでは、

[94] "CSF 1-7561"          
[95] " CIF 1-229"                
[96] " SEEF 1-68 "                
[97] " CRT 1-19"                

ようになりますようにするための数や

CSF, CIF, SEEF, CRT 

のいずれかされていないすべての単語を削除したいです私はそれが欲しかったキーワードが一切なかったので完全に削除されます。 94行目もいくつかの言葉が取り除かれました。

答えて

3

次のベクトルを考えてみましょう:

あなたが行うことができ
v <- c("Final data QAQC done on CSF 1-7561", 
     "CIF 1-229", 
     "SEEF 1-68", 
     "CRT 1-19", 
     "082015-HOBA-G17-1 changed to offPlot based on GIS review of searched  area") 

## vector with words to match 
cond <- c("CSF", "CIF", "SEEF", "CRT") 
## regex that captures digits and tolerates dashes (-) 
reg <- "(\\d+-?)+$" 
## pattern to match either words or regex 
pattern <- paste(c(cond, reg), collapse = "|") 

その後stringiパッケージからstri_extract_all()を使用します。

library(stringi) 
stri_extract_all_regex(v, pattern) 

います:

#[[1]] 
#[1] "CSF" "1-7561" 
# 
#[[2]] 
#[1] "CIF" "1-229" 
# 
#[[3]] 
#[1] "SEEF" "1-68" 
# 
#[[4]] 
#[1] "CRT" "1-19" 
# 
#[[5]] 
#[1] NA 

@akrunによってmentionnedごとに、あなたも行うことができたよう:

regmatches(v, gregexpr(pattern, v)) 

与える:

#[[1]] 
#[1] "CSF" "1-7561" 
# 
#[[2]] 
#[1] "CIF" "1-229" 
# 
#[[3]] 
#[1] "SEEF" "1-68" 
# 
#[[4]] 
#[1] "CRT" "1-19" 
# 
#[[5]] 
#character(0) 
+2

ベースRオプションは 'regmatches(v、gregexpr(pattern、v))'です。 Plus one – akrun

1

使用stringrを:

library(stringr) 
testString <- c("Final data QAQC done on CSF 1-7561" , 
       " CIF 1-229" , 
       " SEEF 1-68 ", 
       " CRT 1-19", 
       "082015-HOBA-G17-1 changed to offPlot based on GIS review of searched  area") 

str_extract(testString, "(CSF|CIF|SEEF|CRT)\\s+\\d+-\\d+") 
[1] "CSF 1-7561" "CIF 1-229" "SEEF 1-68" "CRT 1-19" NA 
+1

5分前に投稿した回答を見てください;) –

+0

私はそれがとても似ていると認めます。わずかに異なる正規表現を試してみてください。 – Psidom

0

私は思いますを使用してくださいライブラリ。

ここにあなたのデータのサブセットがあります。

x <- c("CSF 5896-6133",               
"CRT 16",                 
"SEEF 54-55",                
"CIF 190-195", 
"Final data QAQC done on CSF 1-7561", 
"082015-HOBA-G17-1 changed to offPlot based on GIS review of searched  area" 
) 

str_extractとあなたのパターンに一致する正規表現を使用できます。

library(stringr) 

> str_extract(x, '(CSF|CIF|SEEF|CRT)[:space:]+([0-9]|-)+') 
[1] "CSF 5896-6133" "CRT 16"  "SEEF 54-55" "CIF 190-195" "CSF 1-7561" 
[6] NA 

パターンに一致するものがない場合は、欠損値が返されます。

+1

これは@Psidomと同じではありませんか? –

+0

ええ - それはかなり似ています!彼の応答の少し前に投稿しました –

+0

実際に彼は16:54:18と16:54:44に投稿しました;)とにかく少し異なる正規表現でもありますので、OPはすべてのソリューションを試すことができます。乾杯! –

関連する問題