【问题标题】:Remove special characters from data frame从数据框中删除特殊字符
【发布时间】:2023-03-25 09:54:01
【问题描述】:

我有一个包含字符串“每米能量”的矩阵。 在“m”之前是一个带有问号的菱形符号 - 我不知道它是什么。

我试图通过在矩阵的列上使用它来摆脱它:

a=gsub('Energy per �m','',a) 

[并对 gsub 的第一项使用复制/粘贴],但它不起作用。[“a=rep(5,Energy per”中的意外符号]。当我尝试从原始矩阵中提取一些东西时grepl 我得到:

46: In grepl("ref. value", raw$parameter) :
input string 15318 is invalid in this locale

我怎样才能摆脱所有这些迹象?我希望只有 0-9、A-Z、a-z、/ 和 '.其余的可以被删除。

【问题讨论】:

    标签: r regex gsub non-printing-characters


    【解决方案1】:

    可能有比使用正则表达式更好的方法(例如,通过更改 Encoding)。

    但这是您的正则表达式解决方案:

    gsub("[^0-9A-Za-z///' ]", "", a)
    [1] "Energy per m"
    

    但是,正如@JoshuaUlrich 所指出的,你最好使用:

    gsub("[^[:alnum:]///' ]", "", x)
    [1] "Energy per m"
    

    【讨论】:

    • [^[:alnum:]] 优于 [^0-9A-Za-z]。关于后者,?regex 说“因为它们的解释依赖于语言环境和实现,所以最好避免使用它们。”和“例如,[[:alnum:]] 表示[0-9A-Za-z],除了后者取决于语言环境和字符编码,而前者独立于语言环境和字符集。”
    • 谢谢。我只知道因为在包装中使用了您的第一个解决方案,所以 Ripley 会这样做。 ;-)
    • 谢谢! Andrie,原来我需要更多的字符,比如 .,()-?和空间。扩展正则表达式或用 [:alnum:]] 或 [[:print:]] 替换它会产生奇怪的结果。最简单的解决方案确实是通过 iconv 使用编码。这仅在将列从因子转换为字符后才有效。呼……
    • 啊,罪魁祸首是“欧元”符号。设置错误的编码会破坏参数。 Latin1 只是留下一个空白空间。
    • # 删除不可打印的字符 raw$parameter=as.character(raw$parameter); raw$parameter=iconv(raw$parameter,'Latin-9')
    猜你喜欢
    • 1970-01-01
    • 2018-04-16
    • 1970-01-01
    • 2014-05-15
    • 1970-01-01
    • 2020-06-30
    • 2018-02-02
    • 1970-01-01
    相关资源
    最近更新 更多