2017-10-14 18 views
-1

我在數字之前使用逗號作爲值,如‚0.10。我想刪除尾隨,以獲得類似0.10看似簡單的刪除尾部逗號失敗

的數字我試過gsub(",", "", "‚0.10"),但逗號不會被刪除。有什麼想法發生在這裏?

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

感謝

+0

請提供一些數據,以測試。 – Jan

+1

如果你的列是一個因子變量,它將不起作用 - 用'gsub(「,」,「」,as.character(x))來試試' –

回答

1

我覺得爲什麼你更換出現故障的原因,儘管它只是「應該工作」,是有在x虎視眈眈一個控制字符

如果我複製粘貼無論從OP patternx,問題重現:

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

在另一方面,如果我複製粘貼pattern從OP,但x類型我的編輯,我得到期望的結果:

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

因此,儘管兩個電話外觀s相同,他們的結果不同。

然後使用grepl尋找控制字符([:cntrl:]):

# 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(而不是在x I型)。

您可以使用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"