如何解决几个带有上下的grepl
我有以下 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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。