我试图在dplyr中进行过滤,其中列就像某些观察一样.我可以使用sqldf作为
Test <- sqldf("select * from database
Where SOURCE LIKE '%ALPHA%'
OR SOURCE LIKE '%BETA%'
OR SOURCE LIKE '%GAMMA%'")
Run Code Online (Sandbox Code Playgroud)
我试图使用以下不会返回任何结果:
database %>% dplyr::filter(SOURCE %like% c('%ALPHA%', '%BETA%', '%GAMMA%'))
Run Code Online (Sandbox Code Playgroud)
谢谢
%like%来自data.table包装。您可能还会看到以下警告消息:
Warning message:
In grepl(pattern, vector) :
argument 'pattern' has length > 1 and only the first element will be used
Run Code Online (Sandbox Code Playgroud)
该%like%运算符只是函数的包装grepl,它使用正则表达式进行字符串匹配。所以%不是必需的,事实上它们代表字面百分号。
您一次只能提供一种模式来匹配,因此要么使用正则表达式将它们组合起来'ALPHA|BETA|GAMMA'(如 Psidom 建议),要么将测试分为三个语句:
database %>%
dplyr::filter(
SOURCE %like% 'ALPHA' |
SOURCE %like% 'BETA' |
SOURCE %like% 'GAMMA'
)
Run Code Online (Sandbox Code Playgroud)
您可以使用greplwith ALPHA|BETA|GAMMA,如果SOURCE列中包含三种模式中的任何一种,则匹配.
database %>% filter(grepl('ALPHA|BETA|GAMMA', SOURCE))
Run Code Online (Sandbox Code Playgroud)
如果你希望它是区分大小写的,加ignore.case = T在grepl.