Dplyr过滤多个类似条件

RJ_*_*982 0 r sqldf dplyr

我试图在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)

谢谢

Nat*_*rth 6

%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)


Psi*_*dom 5

您可以使用greplwith ALPHA|BETA|GAMMA,如果SOURCE列中包含三种模式中的任何一种,则匹配.

database %>% filter(grepl('ALPHA|BETA|GAMMA', SOURCE))
Run Code Online (Sandbox Code Playgroud)

如果你希望它是区分大小写的,加ignore.case = Tgrepl.