R 有上下两层的几层玻璃
我有以下data.frame: 我正在使用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”,但区分大小
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")
)