正则表达式(RegEx)和dplyr :: filter()

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式(RegEx)和dplyr :: filter()相关的知识,希望对你有一定的参考价值。

我有一个简单的数据框,如下所示:

x <- c("aa", "aa", "aa", "bb", "cc", "cc", "cc")
y <- c(101, 102, 113, 201, 202, 344, 407)
df = data.frame(x, y)    

    x   y
1   aa  101
2   aa  102
3   aa  113
4   bb  201
5   cc  202
6   cc  344
7   cc  407

我想使用dplyr :: filter()和RegEx过滤掉所有以y开头的1观察

我想象代码看起来像这样:

df %>%
  filter(y != grep("^1")) 

但我得到了一个Error in grep("^1") : argument "x" is missing, with no default

答案

您需要仔细检查greplfilter的文档。

对于grep / grepl,您还必须提供要检入的向量(在本例中为y),filter采用逻辑向量(即您需要使用grepl)。如果你想提供一个索引向量(来自grep),你可以使用slice代替。

df %>% filter(!grepl("^1", y))

或者使用从grep派生的索引:

df %>% slice(grep("^1", y, invert = TRUE))

但你也可以使用substr因为你只对第一个字符感兴趣:

df %>% filter(substr(y, 1, 1) != 1)
另一答案

通过dplyrand stringr(保持在整齐的范围内)的组合,您可以:

df %>% filter(!str_detect(y, "^1"))

这是有效的,因为str_detect返回逻辑向量。

以上是关于正则表达式(RegEx)和dplyr :: filter()的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式

正则表达式

C#正则表达式编程:Regex类用法

boost和c++11的正则表达式regex和线程thread对比

regex格式的名称

正则表达式 [REGEX] - 替换/替换 - 捕获组 1 和 2 中的内容