Мы можем использовать ^(?!.*Wag).*RX4
для этого, где (?!.*Wag)
- отрицательный взгляд на всю строку.Например,
grep('^(?!.*Wag).*RX4', c("Wag RX4 bag", "bag RX4 Wag", "bag RX4 bag"), perl = TRUE)
# [1] 3
Итак, в вашем случае это будет
dplyr::filter(mtcars, grepl('^(?!.*Wag).*RX4', type, perl = TRUE))
# mpg cyl disp hp drat wt qsec vs am gear carb type
# 1 21 6 160 110 3.9 2.62 16.46 0 1 4 4 Mazda RX4
Я бы согласился, что этот шаблон не совсем очевиден, поэтому вы можете сделать это вдва шага, позволяющие использовать обычные AND и NOT:
dplyr::filter(mtcars, grepl('RX4', type) & !grepl('Wag', type))
# mpg cyl disp hp drat wt qsec vs am gear carb type
# 1 21 6 160 110 3.9 2.62 16.46 0 1 4 4 Mazda RX4