在dplyr中进行嵌套过滤的最佳方法

时间:2017-04-13 15:38:11

标签: r 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 )

1 个答案:

答案 0 :(得分:6)

在这种情况下,等效的dplyr表达式将是

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

在这里,我们搜索每个分组国家/地区内的两种情况