【问题标题】:Figure out what character is in a string in R找出R中字符串中的字符
【发布时间】:2018-06-08 17:30:50
【问题描述】:

我正在尝试找出导致我出现问题的字符串向量中的特殊字符。

一个特殊的例子是一个字符串,它看起来像是“-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"

为了澄清,还有其他特殊字符也未被识别为标点符号(尽管它们似乎是)。因此,更换破折号的所有实例不会解决问题。

【问题讨论】:

  • 你能显示dput(vect[1])的输出吗?
  • 如果你只想保留字母数字字符,你可以试试x &lt;- gsub("[^[:alnum:] ]", "", x)
  • @CPak 添加了该输出。问题是,即使我能弄清楚那个字符是什么,向量中也有几千个条目,其中许多包含不寻常的字符。比如我也刚找到几个包含“‘’”的。
  • @ZmnakoAwrahman 它没有解决我的问题。如果您阅读了我的问题的主要部分,它会说“还有其他特殊字符也未被识别为标点符号(尽管它们似乎是)。所以替换破折号的所有实例不会解决问题。
  • @ZmnakoAwrahman 问题正文中已经有一个示例。

标签: r string character-encoding


【解决方案1】:

如果你想尝试找出字符是什么,你可以使用 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>

&lt;U+0096&gt; 看起来像是转换为“保护区开始”的控制代码

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

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

或者如果您确实想保留某个标点符号或其他字符,您可以使用管道将其添加到 gsub 语句中 |

gsub("[^[:alnum:]|? ]", "", "–coliform?") #keep question mark
[1] "coliform?"

【讨论】:

  • 完美!谢谢。
【解决方案2】:

你可以试试gsub

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

即使你有不止一个

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

如果你有一个colmun

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

列出string 中的字符并用|\\ 分隔

【讨论】:

  • 这并没有通过规避问题来解决问题,也没有回答我提出的问题。根据我的问题的主体,“还有其他特殊字符也未被识别为标点符号(尽管它们似乎是)。所以替换破折号的所有实例不会解决问题。”
猜你喜欢
  • 1970-01-01
  • 2018-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-10
  • 2012-10-12
  • 1970-01-01
相关资源
最近更新 更多