R 有上下两层的几层玻璃

R 有上下两层的几层玻璃,r,filter,stringr,uppercase,grepl,R,Filter,Stringr,Uppercase,Grepl,我有以下data.frame: 我正在使用dplyr和stringr,我想用以下方式过滤列Nombre:保留包含“方案”或“促销”或“方案”或“促销”的所有行,即大写和小写。我试过: str_view(df$Nombre, regex("regimen|promocion", ignore_case=T)) 但在这种情况下,它只保留了大写和小写的第一个单词(养生法)。如果我删除ignore_case=T,它会同时找到“currency”和“promocion”,但区分大小

我有以下data.frame:

我正在使用
dplyr
stringr
,我想用以下方式过滤列
Nombre
:保留包含“方案”或“促销”或“方案”或“促销”的所有行,即大写和小写。我试过:

str_view(df$Nombre, regex("regimen|promocion", ignore_case=T))
但在这种情况下,它只保留了大写和小写的第一个单词(养生法)。如果我删除ignore_case=T,它会同时找到“currency”和“promocion”,但区分大小写,即仅小写


当然,这是一个例子,我需要过滤很多单词,而不仅仅是“养生”和“促销”,这就是为什么我不单独过滤每个单词。

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

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因为数据似乎是西班牙语的,所以我会使用一个更加地道的regexp(也能够捕捉重音)

库(tidyverse)
df%
过滤器(str_detect(Nombre,regex(“r\\wgimen | promoci\\wn”,ignore_case=TRUE)))
#>名义上
#>1100雷吉门
#>2 12345 promoción
#>3888奥特罗方案

欢迎来到堆栈溢出。请不要使用代码或数据的图像,因为如果不进行大量不必要的工作,就无法使用它们。问题应该是可复制的。查看堆栈溢出指南和。以对象的形式包含一个最小数据集,例如,如果数据帧为
df Hi,则在其中。我想知道我的回答是否帮助你解决了问题。如果你能让我知道那就太好了。这个很好用。非常感谢。你的帖子里没有口音。请注意,我发布的解决方案显然也适用于重音词,如
RÉGIMEN”,“promoción
;你所需要做的就是调整模式。请随意接受@克里斯特的回答,但也要考虑我的回答,我想投票赞成你的答案,但下面的信息出现:谢谢你的反馈!声誉低于15的人所投的票会被记录下来,但不会改变公开显示的帖子分数。这个解决方案很好。但它非常接近我的解决方案(见下文);唯一的区别是对重音字符使用
\\w
str\u detect
。但是,您不承认您正在使用我的数据,并且您还忘记提到
stru dtect
stringr
包的一部分。
df <- data.frame(
  N = c(100, 12345, 666, 888),
  Nombre = c("Regimen", "promocion", "ley", "otro regimen")
)