【问题标题】:R getting rid of single quote characterR摆脱单引号字符
【发布时间】:2013-02-13 13:40:01
【问题描述】:

我有一个要处理的字符串向量,但我无法摆脱一些奇怪的字符。

当我阅读 csv 文件时,我使用了以下行:

train <- read.csv(file="files/file1.csv", header = T, encoding = "UTF-8")

我用这条线来尝试去掉标点符号:

train$var1 <- gsub("[[:punct:]]", " ", train$var1)

但是在运行后检查时,我仍然看到奇怪的单引号、“...”和像密码隐藏字符一样的黑点。这是输出:

dput(unique(unlist(var1List))[c(30242:30246, 30561, 30484)])
c("opportunity…", "about…", "expected…", "reward…", "us…", "‘as", 
"<U+25CF>")

对摆脱这些字符有什么建议吗?

【问题讨论】:

  • 删除除允许字符的“白名单”之外的所有内容怎么样?你能定义这样的白名单吗?
  • as 中的勾号是重音而不是引号。您还具有省略号字符而不是三个句点。 gsub('[^A-z0-9]', '', x) 将只保留字母和数字,但您会丢失最后一个字符串中的 unicode 表示。
  • @Justin:不要使用[A-z]。它不仅匹配字母。 (另外,这不是口音,而是(单曲)引号)。
  • @TimPietzcker 哦!它还有什么匹配的?
  • @Justin 使用 [:alnum:] 之类的东西可能更安全。

标签: regex r encoding utf


【解决方案1】:

您可以删除除一组合法字符之外的所有内容:

train$var1 <- gsub("[^\\w\\s]", " ", train$var1, perl = TRUE)

例如,会将不是字母数字或空白字符的每个字符更改为空格。

【讨论】:

  • 我不认为这是一个有效的 R 正则表达式。 '\w' 是无法识别的。 (即使使用 grep=T)
  • @joran:谢谢,我一直忘记双反斜杠 - 但perl = TRUE 真的有必要吗?
  • 好吧,我不是正则表达式专家,我只是在 OP 的示例向量上进行测试,如果没有 perl = TRUE,几乎所有内容都会被替换为空格。
  • @joran -- 很有趣。看起来 R 的原生正则表达式引擎不处理 [] 内部的 shorthand 字符类(\\w、\\s 等)。 (它将它们解释为\ 和w 或\ 和s)。 longer 版本可以在没有perl=TRUE 的情况下工作,如运行gsub("[^[:alnum:][:space:]]", " ", train$var1) 所示
猜你喜欢
  • 2017-08-16
  • 1970-01-01
  • 2011-10-02
  • 2020-04-02
  • 2017-03-09
  • 2012-11-19
  • 2018-03-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多