问题描述
我有以下 data.frame: data frame
我正在使用 dplyr
和 stringr
,我想按以下方式过滤列 Nombre
:保留所有包含“regimen”或“promocion”或“ REGIMEN”或“PROMOCION”,即大写和小写。我试过了:
str_view(df$Nombre,regex("regimen|promocion",ignore_case=T))
但在这种情况下,它只保留大写和小写的第一个单词(regimen)。如果我删除ignore_case=T,它会同时找到“regimen”和“promocion”,但区分大小写,即只有小写。
当然,这是一个例子,我需要过滤很多词,不仅仅是“regimen”和“promocion”,这就是为什么我不单独过滤每个词。
解决方法
您可以使用 filter
中的 dplyr
以及 grepl
和 base R
中的 (?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,Nombre = c("RÉGIMEN","promoción","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