几个带有上下的grepl

several grepl with upper and lower

我有以下 data.frame: data frame

我正在使用 dplyrstringr,我想按以下方式过滤列 Nombre:保留包含“regimen”或“promocion”的所有行或“REGIMEN”或“PROMOCION”,即大写和小写。我试过了:

str_view(df$Nombre, regex("regimen|promocion", ignore_case=T))

但在那种情况下,它只保留大写和小写的第一个单词 (regimen)。如果我删除 ignore_case=T,它会同时找到“regimen”和“promocion”,但区分大小写,即仅小写。

当然,这是一个例子,我需要过滤很多词,不仅仅是“regimen”和“promocion”,所以我没有单独过滤每个词。

您可以使用 dplyr 中的 filter 以及 base R 中的 grepl(?i) 来使模式匹配不区分大小写:

library(dyplr)
df %>%
  filter(grepl("(?i)regimen|promocion", Nombre))
      N       Nombre
1   100      Regimen
2 12345    promocion
3   888 otro regimen

或者,您可以使用相同的模式简单地对数据帧进行子集化:

df[grepl("(?i)regimen|promocion", df$Nombre),]

数据:

df <- data.frame(
  N = c(100, 12345, 666, 888),
  Nombre = c("Regimen", "promocion", "ley", "otro regimen")
)

由于数据似乎是西班牙语,我会使用更复杂的正则表达式(也能够捕捉口音)。

library(tidyverse)


df <- data.frame(
  N = c(100, 12345, 666, 888),
  Nombre = c("RÉGIMEN", "promoción", "ley", "otro regimen")
)
df %>%
  filter(str_detect(Nombre, regex("r\wgimen|promoci\wn", ignore_case = TRUE)))
#>       N       Nombre
#> 1   100      RÉGIMEN
#> 2 12345    promoción
#> 3   888 otro regimen