2017-04-13 36 views
0

dplyr中的嵌套過濾?

以下兩個代碼塊都可以工作,但我對是否可以使用管道一次性完成第二個代碼塊(使用dplyr)感興趣?或者我寫下面的方式是實現這一目標的最佳方式。在dplyr中執行嵌套過濾的最佳方法

在SQL我這樣做:

library(sqldf) 
    library(gapminder) 


    sqldf(' 
    select * from gapminder 
    where country in (select country from gapminder where year > 2000 and lifeExp < 75) 
     and country in (select country from gapminder where year < 2000 and lifeExp > 75) 
    ') 

在dplyr我不喜歡這樣寫道:

gapminder %>% filter( year < 2000 & lifeExp > 75 ) %>% select(country) -> condition1 
gapminder %>% filter( year >= 2000 & lifeExp < 75 ) %>% select(country) -> condition2 

gapminder %>% filter(country %in% condition1$country, country %in% condition2$country) 

回答

5

在這種情況下的等效dplyr表達將

gapminder %>% 
    group_by(country) %>% 
    filter(any(year < 2000 & lifeExp > 75) & any(year >= 2000 & lifeExp < 75)) 

在這裏,我們在每個分組國家內搜索兩種條件

相關問題