如何在一组字符串中删除 r 中的这些特殊字符:’s,…
Posted
技术标签:
【中文标题】如何在一组字符串中删除 r 中的这些特殊字符:’s,…【英文标题】:How to remove these special characters in r in a set of string : ’s, … 【发布时间】:2022-01-14 09:09:19 【问题描述】:我有这个包含特殊字符的字符串,我无法从主数据框中删除这些字符但是,当我通过 dft 准备一个单独的对象然后我使用以下代码时,我能够删除特殊字符字符。
dft <- "rt shibxwarrior hodl trust processsome great things horizon folks shib shib shiba shibainu shibar… rt askthedr just bought m usd worth shib think it’s robinhoodapp shibaarmy"
rmSpec <- "â|€|¦|â|€™|" # The "|" designates a logical OR in regular expressions.
s.rem <- gsub(rmSpec, "", dft) # gsub replace any matches in remSpec and replace them with "".
s.rem
但是当我在主数据框上使用相同的代码时,如下以不同的行(推文)的形式,相同的代码将不起作用并显示错误:UseMethod中的错误(“检查” , X) : 没有适用于“字符”类对象的“检查”方法
[1] rt shibxwarrior hodl 信任过程一些伟大的事情地平线人 shib shib shiba shibainu shibar... [2] rt askthedr 刚买了 m 美元,价值 shib 认为它是 robinhoodapp shibaarmy [3] rt bitshiba 发送 shib 关注转推推文 uufefufcd [4] rt shibinform 想要 shib 列出 robinhoodappuf 是 是 是 ubufef ubufef ubufef [5] rt shiblucky shib 赠品只需转发关注
请您帮忙,谢谢。
【问题讨论】:
你是如何在你的数据框上使用它的?比如你的代码行是什么?问题很可能来自那部分。我怀疑这可能是您的数据框中的选项 stringAsFactors 未设置为 FALSE 对你在这里所做的事情要非常小心。您的数据只是在某些时候被错误地编码。it’s
就是 it's
。首先尝试使用正确的编码获取您的数据。还要记住,有很多带有合法 â
的单词,您只需将其删除并创建一个虚假单词。
@MerijnvanTilborg :感谢您的回复,我认为问题出在我的代码中,我将推文转换为两个 utf-8 字符,我可以使用什么其他选项来摆脱它。当我从我的代码中删除 utf-8 字符时,所有字符都被删除了,但后来我在转换为文档术语矩阵时发现了问题......你能帮忙吗..
你可以尝试修复它...我稍后会给出一个小例子
这很可能是 xy 问题。您正在寻找正则表达式解决方案,但最好修复编码。在读取数据时尝试设置 locale
和编码。我不确定,但一些 csv 读取函数包含 encoding
参数。为 R 会话设置本地也可能有所帮助。或者,您可以在 excel 中重新编码文件,然后在 R 中读取新文件
【参考方案1】:
仅提取我们可能使用的字母和数字,
library(stringr)
dft <- "rt shibxwarrior hodl trust processsome great things horizon folks shib shib shiba shibainu shibar… rt askthedr just bought m usd worth shib think it’s robinhoodapp shibaarmy"
str_replace_all(dft, "[^a-zA-Z0-9]", " ")
[1] "rt shibxwarrior hodl trust processsome great things horizon folks shib shib shiba shibainu shibar rt askthedr just bought m usd worth shib think it s robinhoodapp shibaarmy"
【讨论】:
这不是我需要的......谢谢【参考方案2】:如前所述,首选方法是使用正确的编码读入您的数据,但有时您的数据只是损坏了。我的 FixEncoding 函数创建了一个名为 vector 的查找来解决这个问题(我过去在处理错误存储的旧 csv 文件时遇到的最多 3 个错误编码。您可以使用所有 unicode 字符并错误编码。这样您可以将错误翻译回来.
FixEncoding <- function()
# create the unicode ranges from https://www.i18nqa.com/debug/utf8-debug.html
range <- c(sprintf("%x", seq(strtoi("0xa0"), strtoi("0xff"))))
unicode <- vapply(range, FUN.VALUE = character(1), function(x) parse(text = paste0("'\\u00", x, "'"))[[1]] )
# add the ones that are missing (red ones in https://www.i18nqa.com/debug/utf8-debug.html)
unicode <- c(c("\u0168", "\u0152", "\u017d", "\u0153", "\u017e", "\u0178", "\u2019", "\u20ac", "\u201a", "\u0192", "\u201e", "\u2026", "\u2020", "\u2021", "\u02c6", "\u2030", "\u0160", "\u2030"), unicode)
once <- vapply(unicode, FUN.VALUE = character(1), function(x)
Encoding(x) <- "Windows-1252"
iconv(x, to = "UTF-8")
)
fix_once <- unicode
names(fix_once) <- once
twice <- vapply(once, FUN.VALUE = character(1), function(x)
Encoding(x) <- "Windows-1252"
iconv(x, to = "UTF-8")
)
fix_twice <- unicode
names(fix_twice) <- twice
triple <- vapply(twice, FUN.VALUE = character(1), function(x)
Encoding(x) <- "Windows-1252"
iconv(x, to = "UTF-8")
)
fix_triple <- unicode
names(fix_triple) <- triple
fixes <- c(fix_triple, fix_twice, fix_once)
return(fixes)
fixes <- FixEncoding()
str(fixes)
Named chr [1:342] "U" "Œ" "Ž" "œ" "ž" "Ÿ" "’" "\200" "‚" "ƒ" "„" "…" "†" "‡" "\210" "‰" "Š" "‰" " " "¡" "¢" "£" "¤" "¥" "¦" "§" "¨" "©" "ª" "«" "¬" "" "®" "¯" "°" "±" "²" "³" "´" ...
- attr(*, "names")= chr [1:342] "Ãâ\200¦Ã‚¨" "Ãâ\200¦Ã¢â‚¬â„¢" "Ãâ\200¦Ã‚½" "Ãâ\200¦Ã¢â‚¬Å“" ...
dft <- "rt shibxwarrior hodl trust processsome great things horizon folks shib shib shiba shibainu shibar… rt askthedr just bought m usd worth shib think it’s robinhoodapp shibaarmy"
stri_replace_all_fixed(dft, names(fixes), fixes, vectorize_all = F)
[1] "rt shibxwarrior hodl trust processsome great things horizon folks shib shib shiba shibainu shibar… rt askthedr just bought m usd worth shib think it’s robinhoodapp shibaarmy"
发生情况的简单示例
让lélèlölã
使用 unicode "\u006C\u00E9\u006C\u00E8\u006C\u00F6\u006C\u00E3"
messy <- "\u006C\u00E9\u006C\u00E8\u006C\u00F6\u006C\u00E3"
messy
# [1] "lélèlölã"
# this is just what happens if files get corrupt by saving in wrong encodings, we did that unicode character by unicode character in my fix function.
Encoding(messy) <- "Windows-1252"
messy <- iconv(messy, to = "UTF-8")
messy
# [1] "lélèlölã" # once badly encoded
# [1] "lélèlölã" # twice badly encoded
# [1] "lélèlölã" # three times!
# All three strings above would be fixed
stri_replace_all_fixed(messy, names(fixes), fixes, vectorize_all = F)
# [1] "lélèlölã"
# other simple replacements as suggested would give us `llll` or `lÃlÃlÃlÃ`?
【讨论】:
以上是关于如何在一组字符串中删除 r 中的这些特殊字符:’s,…的主要内容,如果未能解决你的问题,请参考以下文章