首页 > 解决方案 > 过滤掉R中包含UTF-8阿拉伯字符的列中的条目

问题描述

我有一个名为 event_table 的数据集,它有一个标题为“c.Comments”的列,其中包含主要是英文的字符串,但在一些评论条目中有一些阿拉伯语。我想过滤掉评论条目包含阿拉伯字符的行。

我将数据从 xlsx 文件读入 R,阿拉伯字符显示为 UTF-8 "< U+4903 >< U+483d >" (没有空格)等。

我尝试使用正则表达式来实现我想要的,但我试图匹配的字符串拒绝被过滤掉。我尝试了各种不同的正则表达式,但似乎没有一个能奏效。我会尝试从字面上过滤掉“

event_table <- event_table %>%
    filter(!grepl("<U+", c.Comments, fixed = TRUE))

event_table <- event_table %>%
    filter(!grepl("<U\\+", c.Comments)

“\x”、“\d\d\d\d”和各种其他组合对我没有任何帮助

我开始怀疑我的过滤方法可能是问题而不是正则表达式,所以任何建议都将不胜感激。

标签: rregexutf-8

解决方案


grep可以使用/grepl使用 PCRE 正则表达式来检测阿拉伯字符,例如\p{Arabic}

> df <- data.frame(x=c("123", "abc", "ﺏ"))
> df
         x
1      123
2      abc
3 <U+FE8F>
> grepl("\\p{Arabic}", df$x, perl=TRUE)
[1] FALSE FALSE  TRUE

在你的情况下,代码看起来像

event_table <- event_table %>%
    filter(!grepl("\\p{Arabic}", c.Comments, perl=TRUE))

推荐阅读