2017-04-13 10 views
0

dplyrでネストされたフィルタリング?

次の2つのコードチャンクはどちらも機能しますが、2番目のコードチャンク(dplyrを使用)がパイプを使用して1回実行できるかどうかに興味がありますか?または、私が下に書いたやり方は、これを行うための意図した/最善の方法です。 SQLでdplyrでネストされたフィルタリングを行う最良の方法

私はこれを行う:

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

だろう、我々各グループ内の両方の条件を検索する

関連する問題