Dplyr过滤多个类似条件

时间:2017-11-01 14:31:30

标签: r dplyr sqldf

我正在尝试在dplyr中进行过滤,其中列就像某些观察一样。我可以使用sqldf作为

Test <- sqldf("select * from database 
          Where SOURCE LIKE '%ALPHA%' 
          OR SOURCE LIKE '%BETA%' 
          OR SOURCE LIKE '%GAMMA%'")

我尝试使用以下不会返回任何结果的内容:

database %>% dplyr::filter(SOURCE %like% c('%ALPHA%', '%BETA%', '%GAMMA%'))

由于

2 个答案:

答案 0 :(得分:5)

您可以将greplALPHA|BETA|GAMMA一起使用,如果 SOURCE 列中包含三种模式中的任何一种,则会匹配。

database %>% filter(grepl('ALPHA|BETA|GAMMA', SOURCE))

如果您希望它不区分大小写,请在ignore.case = T中添加grepl

答案 1 :(得分:2)

%like%来自data.table包。您可能也会看到此警告消息:

Warning message:
In grepl(pattern, vector) :
  argument 'pattern' has length > 1 and only the first element will be used

%like%运算符只是grepl函数的包装器,它使用正则表达式进行字符串匹配。因此%不是必需的,事实上它们代表字面百分号。

你一次只能提供一种模式来匹配,所以要么使用正则表达式'ALPHA|BETA|GAMMA'组合它们(如Psidom建议的那样),要么将测试分成三个语句:

database %>%
  dplyr::filter(
    SOURCE %like% 'ALPHA' |
      SOURCE %like% 'BETA' |
      SOURCE %like% 'GAMMA'
    )