我正在尝试在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%'))
由于
答案 0 :(得分:5)
您可以将grepl
与ALPHA|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'
)