正则表达式(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
答案
您需要仔细检查grepl
和filter
的文档。
对于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)
另一答案
通过dplyr
and stringr
(保持在整齐的范围内)的组合,您可以:
df %>% filter(!str_detect(y, "^1"))
这是有效的,因为str_detect
返回逻辑向量。
以上是关于正则表达式(RegEx)和dplyr :: filter()的主要内容,如果未能解决你的问题,请参考以下文章