除了 R 中特定的相似值之外,对 Stringr 匹配 (str_detect) 进行过滤?

alx*_*lvt 6 r stringr dplyr

我正在尝试创建一个 dplyr 管道来过滤

想象一个数据框jobs,我想从列中过滤出最高级的位置titles

titles

Chief Executive Officer
Chief Financial Officer
Chief Technical Officer
Manager
Product Manager
Programmer
Scientist
Marketer
Lawyer
Secretary
Run Code Online (Sandbox Code Playgroud)

用于过滤掉它们的 R 代码(直到“经理”)将是......

jobs %>% 
filter(!str_detect(title, 'Chief')) %>%
filter(!str_detect(title, 'Manager')) ...
Run Code Online (Sandbox Code Playgroud)

但我仍然想在最终过滤中保留“程序经理”,以生成一个包含所有“较低级别作业”的新数据框,例如

Product Manager
Programmer
Scientist
Marketer
Lawyer
Secretary
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以在除一个特定字符串之外的给定值上指定 str_detect() 过滤器?

假设数据框的列有 1000 个角色,具有各种字符串组合,包括“Manager”,但始终会有针对特定异常的过滤器。

Ron*_*hah 10

或者你可以有一个单独的filter“产品经理”

library(tidyverse)

jobs %>% 
filter((!str_detect(title, "Chief|Manager")) | str_detect(title, "Product Manager"))


#            title
#1 Product Manager
#2      Programmer
#3       Scientist
#4        Marketer
#5          Lawyer
#6       Secretary
Run Code Online (Sandbox Code Playgroud)

也可以使用 R 基体进行扭曲grepl/grep

jobs[c(grep("Product Manager",jobs$title), 
       grep("Chief|Manager", jobs$title, invert = TRUE)),, drop = FALSE]
Run Code Online (Sandbox Code Playgroud)