dplyr filter : value is contained in a vector

2020-03-09 08:08发布

问题:

Is there a straight way to filter using dplyr::filter given an specific vector?

I'm looking for something like the code below:

top.food <- c('pizza', 'bacon', 'burger')

filter(orders, dish == 'pizza' | dish == 'bacon' | dish == 'burger')

I've chosen a character vector but it could be of any class.

I've thought about using grepl as a logical predicate grepl(dish, top.food) but it doesn't work since dish doesn't match a valid pattern (it takes just the 1st element).

Any ideas? thnx!

回答1:

I think you are looking for the value matching function %in%.

filter(orders, dish %in% top.food)

Or you can switch to slice() and use match().

slice(orders, match(dish, top.food, 0L))

I believe that slice() is a bit faster than filter(), so that might be beneficial to you. See help(match) for all the details on value matching.



标签: r filter dplyr