2017-10-14 8 views
-1

‚0.10のように、数値の前にコンマが付いた値があります。私はgsub(",", "", "‚0.10")を試してみました0.10後ろのコンマの見た目が単純に削除されない

のような番号を取得するには、末尾,を削除したいのですが、コンマは削除されません。何がここで起こっているアイデアですか?私はあなたの交換が失敗した理由は、それにもかかわらず、単に「動作するはず」だと思う

gsub(",", "", "‚0.10") 
# [1] "‚0.10" 

おかげ

+0

テストにいくつかのデータを入力してください。 – Jan

+1

あなたの列が要素変数であれば動作しません。 'gsub("、 "、" "、as.character(x))' –

答えて

1

xに潜ん制御文字があるということです。私はコピー&ペースト場合patternをOPから、一方

gsub(pattern = ",", replacement = "", x = "‚0.10") 
# [1] "‚0.10" 

が、タイプx中:

私はOPから両方patternxをコピー&ペーストした場合は、問題が再現されます私の編集者、私は望みの結果を得ます:

gsub(pattern = ",", replacement = "", x = ",0.10") 
# [1] "0.10" 

従って、2つのコールはですがsと同じですが、その結果は異なります。

そして、制御文字([:cntrl:])を探すためにgreplを使用します。

# copy-paste x from OP 
grepl(pattern = "[[:cntrl:]]", x = "‚0.10") 
# [1] TRUE 

# type in x in editor 
> grepl(pattern = "[[:cntrl:]]", x = ",0.10") 
# [1] FALSE 

確かに、元x内(とないI型xで)何かがあります。

stringi::stri_unescape_unicodeを使用して、そこに何が隠れているのかを確認できます。ここでも、OPから文字列をコピー&ペーストは:

library(stringi) 
stri_unescape_unicode(str = "‚0.10") 
# [1] "\u00820.10" 

を元"‚0.10",normal ,のように見えますが、それはどのトリック私たちUnicode Character 'BREAK PERMITTED HERE' (U+0082)カンマです。

これは、上流に固定することができない場合はこのように、あなたが使用することができます:

gsub(pattern = "[[:cntrl:]]", replacement = "", x = "‚0.10") 
# "0.10" 
関連する問題