0

目的は、正規表現を解析し、一致したパターンを置き換えることです。

次の例を検討してください。

data <- c("cat 6kg","cat g250", "cat dog","cat 10 kg") 

catおよび のすべての出現箇所を特定する必要があります[0-9]。これをする:

found <- data[grepl("(^cat.[a-z][0-9])|(^cat.[0-9])",data)]
found
[1] "cat 6kg"   "cat g250"  "cat 10 kg"

found次のステップは、 の各要素を stringに置き換えることcatです。スタックの質問 20219311 に従って、パッケージ (gsubfn) からgsubsub、およびgsubfn()を試みました。

gsubfn("((^cat.[a-z][0-9])|(^cat.[0-9]))", "cat",data)
[1] "catkg"   "cat50"   "cat dog" "cat0 kg"

これは期待される結果ではありません:

[#] "cat" "cat" "cat dog" "cat"

私はポイントを逃していると思います。助けていただければ幸いです。ありがとう。

4

3 に答える 3

3

シンプル、、、、文字列catをマッチ要素に代入するだけ。これにより、要素に存在するすべての文字が置き換えられますcat

> data <- c("cat 6kg","cat g250", "cat dog","cat 10 kg") 
> data[grepl("(^cat.[a-z][0-9])|(^cat.[0-9])",data)] <- "cat"
> data
[1] "cat"     "cat"     "cat dog" "cat" 

また

> data <- c("cat 6kg","cat g250", "cat dog","cat 10 kg") 
> data[grepl("^cat.[a-z]?[0-9]",data)] <- "cat"
> data
[1] "cat"     "cat"     "cat dog" "cat" 
于 2015-07-25T10:56:40.243 に答える
1

あなたもできる

 sub('\\s*dog(*SKIP)(*F)|(?<=cat).*', '', data, perl=TRUE)
 #[1] "cat"     "cat"     "cat dog" "cat"    

または

 sub('(cat)\\s*([0-9]|[a-z][0-9]).*$', '\\1', data)
 #[1] "cat"     "cat"     "cat dog" "cat"    
于 2015-07-25T11:00:39.717 に答える
0

これを試して:

gsub('(\\w?[0-9].*)','',data)
#[1] "cat "    "cat "    "cat dog" "cat " 
于 2015-07-25T11:15:55.847 に答える