我在数字前面有逗号的值,例如‚0.10
。我想删除尾随,
以获取0.10
我已尝试gsub(",", "", "‚0.10")
,但未删除逗号。任何想法在这里发生了什么?
gsub(",", "", "‚0.10")
# [1] "‚0.10"
由于
答案 0 :(得分:1)
我认为你的替换失败的原因,尽管它只是"应该工作",是x
潜伏着控制角色。
如果我从OP中复制粘贴 pattern
和x
,则会重现该问题:
gsub(pattern = ",", replacement = "", x = "‚0.10")
# [1] "‚0.10"
另一方面,如果我在OP中复制粘贴pattern
,但在我的编辑器中输入 x
,我会得到所需的结果:
gsub(pattern = ",", replacement = "", x = ",0.10")
# [1] "0.10"
因此,尽管两个调用看起来相同,但它们的结果不同。
然后使用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
我输入的内容)。
您可以使用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"