找出R

时间:2018-06-08 17:30:51

标签: r string character-encoding

我试图找出导致我出问题的字符串向量中的特殊字符是什么。

一个特殊的例子是一个看起来像“-coliform”的字符串,这是我矢量中的第一个条目。

但这不是它实际上说的,因为我得到以下内容:

>"-coliform" == vect[1]
[1] FALSE

所以很明显“ - ”实际上并不是正确的符号。这会导致问题,因为我需要从字符串中删除所有标点符号,但有些标点字符不会被识别为标点符号。

如何确定我实际展示的角色,以便将其删除?

我不确定它是否是编码问题。看来这个角色是UTF-8,我通过以下方式找到了它:

>weird_char <- substr(vect[1], 1, 1)
>encoding(weird_char)
[1] "UTF-8"

编辑:根据其他用户的请求添加某事物给出的输出。

>dput(vect[1])
"–coliform"

为了澄清,还有其他特殊字符也未被识别为标点符号(尽管它们看起来像是)。因此,替换破折号的所有实例将无法解决问题。

2 个答案:

答案 0 :(得分:2)

如果您想尝试找出字符是什么,可以使用unicode包

library(unicode)
as.u_char_seq("–coliform", "")
[1] <U+0096,U+0063,U+006F,U+006C,U+0069,U+0066,U+006F,U+0072,U+006D>

<U+0096>看起来像是转换为“保护区开始”的控制代码

如果您有许多未知字符并且只想保留字母数字,则可以使用

gsub("[^[:alnum:] ]", "", "–coliform")
[1] "coliform"

或者您确实要保留一些标点符号或其他字符,您可以使用管道|

将其添加到gsub语句中
gsub("[^[:alnum:]|? ]", "", "–coliform?") #keep question mark
[1] "coliform?"

答案 1 :(得分:1)

您可以尝试gsub

gsub('-', '', '-coliform')

即使您有多个

gsub('-|\\^|\\%', '', '-co%li^form')

如果你有一个colmun

x = c('-co%li^form', '-total_coliform')
gsub('-|\\^|\\%|\\_', '', x)

列出string中的字符,并将其与|\\

分开