2016-05-10 1 views
1

私はPriceと呼ばれるデータセットを持っていますが、数字であると考えられていますが、すべてが5で+に置き換えられているため文字列として生成されます。Rで+5を置換する

それは次のようになります。私は5で、私が書いたコードを+を試して交換するRでgsub機能を使用

"99000" "98300" "98300" "98290" "98310" " 9831+ " "98310" " 9830+ " " 9830+ " " 9830+ " " 9829+ " " 9828+ " " 9827+ " "98270" 

は次のとおりです。

finalPrice<-gsub("+",5,Price) 

ただし、出力はちょうどです

"59595050505,5 59585350505,5 59585350505,5 59585259505,5 59585351505,5 5 5 595853515+5 5,5 59585351505,5 5 5 595853505+5 5,5 5 5 595853505+5 

どのようにして私が意図したことに意味をなさない数字の束?

+1

'finalPrice <-gsub( "[+]"、5、価格)' –

答えて

5

+記号はエスケープする必要があります。これを試してみてください:

finalPrice<-gsub("\\+",5, Price) 
2

正規表現を書いて、+一致先行グループ1回以上を意味します。 +が空になる前の正規表現の文字がそのままであるため、gsubはターゲットのすべての空文字列に一致します。

結果は5がこれらの位置のそれぞれに挿入されています。これを避けるために

、Rダブルバックスラッシュで行われる必要が+、脱出:使用に加え

finalPrice<-gsub("\\+",5,Price)

5

パターン引数にマッチするliteral- xを強制的にダブルエスケープfixed=TRUEパラメータを使用するか、 "[。]"演算で定義された文字クラスを使用することもできます。詳細については?regexページを参照してください:

> gsub("+", "5", txt, fixed=TRUE) 
[1] "99000" "98300" "98300" "98290" "98310" 
[6] " 98315 " "98310" " 98305 " " 98305 " " 98305 " 
[11] " 98295 " " 98285 " " 98275 " "98270" 
> gsub("[+]", "5", txt) 
[1] "99000" "98300" "98300" "98290" "98310" 
[6] " 98315 " "98310" " 98305 " " 98305 " " 98305 " 
[11] " 98295 " " 98285 " " 98275 " "98270" 
+0

私は、これはまた、より効率的なソリューションであると信じています。 – Roland

関連する問題