как передать условия в виде dataframe в dplyr :: filter - PullRequest
0 голосов
/ 15 мая 2018

У меня есть список условий, таких как:

cond = data.frame(cyl=4, vs=0, am=1)

Я хочу передать условия для фильтрации моих данных.

mtcars %in% filter (???)

Есть ли способ сделать это? Я хочу, чтобы решение было программируемым, чтобы я мог передать список условий в виде фрейма данных (или списка) в любой набор данных. Большое спасибо!

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

Хотя, ответ уже принят, но вот моя попытка.

library(dplyr)
mtcars %>% 
    filter(eval(parse(text = paste0(names(cond), "  ==  ",unname(cond), collapse = " & "))))

Выход :

  mpg cyl  disp hp drat   wt qsec vs am gear carb
1  26   4 120.3 91 4.43 2.14 16.7  0  1    5    2
0 голосов
/ 15 мая 2018

Если ваши условия всегда «равны» (т. Е. Вы хотите cyl == 4, vs==0 и т. Д.) И всегда «объединены» вместе, тогда вы можете просто использовать inner_join в данных.

mtcars_filtered <- inner_join(mtcars, cond)

Это также имеет то преимущество, что вы можете создавать более сложные объединения, добавляя соответствующие строки в таблицу cond.

Если вы хотите более тонкие условия, вам нужно будет перейти к нестандартной оценке.Это заставит ваши глаза выпасть из вашей головы.Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...