r语言 - dplyr过滤器多个类似条件



我正在尝试在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%'))

谢谢

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

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

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

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

基于Psidom和Nathan Werth的回应,对于Tidyverse友好和简洁的方法,我们可以做到;

library(data.table); library(tidyverse)
database %>%
  dplyr::filter(SOURCE %ilike% "ALPHA|BETA|GAMMA") # ilike = case insensitive fuzzysearch

相关内容

  • 没有找到相关文章

最新更新