首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按组和多个条件过滤,dplyr

按组和多个条件过滤,dplyr
EN

Stack Overflow用户
提问于 2021-05-05 23:54:45
回答 3查看 46关注 0票数 0

我正在尝试过滤从2000年到2016年的国家,在这些国家,indic.no在所有年份都必须等于10。

我尝试使用多个条件的不同过滤,但似乎从未得到预期的结果。

代码语言:javascript
复制
#subset of df
structure(list(ISO3 = c("ABW", "ABW", "ABW", "ABW", "ABW", "ABW", 
                        "ABW", "ABW", "ABW", "ABW", "ABW", "ABW", "ABW", "ABW", "ABW", 
                        "ABW", "ABW", "ABW", "ABW", "ARE", "ARE", "ARE", "ARE", "ARE", 
                        "ARE", "ARE", "ARE", "ARE", "ARE", "ARE", "ARE", "ARE", "ARE", 
                        "ARE", "ARE", "ARE", "ARE", "ARE", "AUS", "AUS", "AUS", "AUS", 
                        "AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "AUS", 
                        "AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "BRB", "BRB", "BRB", 
                        "BRB", "BRB", "BRB", "BRB", "BRB", "BRB", "BRB", "BRB", "BRB", 
                        "BRB", "BRB", "BRB", "BRB", "BRB", "COL", "COL", "COL", "COL", 
                        "COL", "COL", "COL", "COL", "COL", "COL", "COL", "COL", "COL", 
                        "COL", "COL", "COL", "COL", "COL", "COL", "FJI", "FJI", "FJI", 
                        "FJI", "FJI", "FJI", "FJI", "FJI", "FJI", "FJI", "FJI", "FJI", 
                        "FJI", "FJI", "FJI", "FJI", "FJI", "FJI", "FJI", "KIR", "KIR", 
                        "KIR", "KIR", "KIR", "KIR", "KIR", "KIR", "KIR", "KIR", "KIR", 
                        "KIR", "KIR", "KIR", "KIR", "KIR", "KIR", "KIR", "PNG", "PNG", 
                        "PNG", "PNG", "PNG", "PNG", "PNG", "PNG", "PNG", "PNG", "PNG", 
                        "PNG", "PNG", "PNG", "PNG", "PNG", "PNG", "PNG", "PNG", "VCT", 
                        "VCT", "VCT", "VCT", "VCT", "VCT", "VCT", "VCT", "VCT", "VCT", 
                        "VCT", "VCT", "VCT", "VCT", "VCT", "VCT", "VCT"), 
                        NAME_0 = c("Aruba", "Aruba", "Aruba", "Aruba", "Aruba", "Aruba", "Aruba", "Aruba", 
                        "Aruba", "Aruba", "Aruba", "Aruba", "Aruba", "Aruba", "Aruba", 
                        "Aruba", "Aruba", "Aruba", "Aruba", "United Arab Emirates", "United Arab Emirates", 
                        "United Arab Emirates", "United Arab Emirates", "United Arab Emirates", 
                        "United Arab Emirates", "United Arab Emirates", "United Arab Emirates", 
                        "United Arab Emirates", "United Arab Emirates", "United Arab Emirates", 
                        "United Arab Emirates", "United Arab Emirates", "United Arab Emirates", 
                        "United Arab Emirates", "United Arab Emirates", "United Arab Emirates", 
                        "United Arab Emirates", "United Arab Emirates", "Australia", 
                        "Australia", "Australia", "Australia", "Australia", "Australia", 
                        "Australia", "Australia", "Australia", "Australia", "Australia", 
                        "Australia", "Australia", "Australia", "Australia", "Australia", 
                        "Australia", "Australia", "Australia", "Barbados", "Barbados", 
                        "Barbados", "Barbados", "Barbados", "Barbados", "Barbados", "Barbados", 
                        "Barbados", "Barbados", "Barbados", "Barbados", "Barbados", "Barbados", 
                        "Barbados", "Barbados", "Barbados", "Colombia", "Colombia", "Colombia", 
                        "Colombia", "Colombia", "Colombia", "Colombia", "Colombia", "Colombia", 
                        "Colombia", "Colombia", "Colombia", "Colombia", "Colombia", "Colombia", 
                        "Colombia", "Colombia", "Colombia", "Colombia", "Fiji", "Fiji", 
                        "Fiji", "Fiji", "Fiji", "Fiji", "Fiji", "Fiji", "Fiji", "Fiji", 
                        "Fiji", "Fiji", "Fiji", "Fiji", "Fiji", "Fiji", "Fiji", "Fiji", 
                        "Fiji", "Kiribati", "Kiribati", "Kiribati", "Kiribati", "Kiribati", 
                        "Kiribati", "Kiribati", "Kiribati", "Kiribati", "Kiribati", "Kiribati", 
                        "Kiribati", "Kiribati", "Kiribati", "Kiribati", "Kiribati", "Kiribati", 
                        "Kiribati", "Papua New Guinea", "Papua New Guinea", "Papua New Guinea", 
                        "Papua New Guinea", "Papua New Guinea", "Papua New Guinea", "Papua New Guinea", 
                        "Papua New Guinea", "Papua New Guinea", "Papua New Guinea", "Papua New Guinea", 
                        "Papua New Guinea", "Papua New Guinea", "Papua New Guinea", "Papua New Guinea", 
                        "Papua New Guinea", "Papua New Guinea", "Papua New Guinea", "Papua New Guinea", 
                        "Saint Vincent and the Grenadines", "Saint Vincent and the Grenadines", 
                        "Saint Vincent and the Grenadines", "Saint Vincent and the Grenadines", 
                        "Saint Vincent and the Grenadines", "Saint Vincent and the Grenadines", 
                        "Saint Vincent and the Grenadines", "Saint Vincent and the Grenadines", 
                        "Saint Vincent and the Grenadines", "Saint Vincent and the Grenadines", 
                        "Saint Vincent and the Grenadines", "Saint Vincent and the Grenadines", 
                        "Saint Vincent and the Grenadines", "Saint Vincent and the Grenadines", 
                        "Saint Vincent and the Grenadines", "Saint Vincent and the Grenadines", 
                        "Saint Vincent and the Grenadines"), Year = c(2000, 2001, 2002, 
                                                                      2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 
                        2014, 2015, 2016, 2017, 2018, 2000, 2001, 2002, 2003, 2004, 2005, 
                        2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 
                        2017, 2018, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 
                        2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2000, 
                        2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 
                        2012, 2013, 2014, 2015, 2016, 2000, 2001, 2002, 2003, 2004, 2005, 
                        2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 
                        2017, 2018, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 
                        2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2000, 
                        2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 
                        2012, 2013, 2014, 2015, 2016, 2017, 2000, 2001, 2002, 2003, 2004, 
                        2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 
                        2016, 2017, 2018, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 
                        2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016), indic.no = c(10, 
                        10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 
                        7, 7, 10, 10, 10, 10, 10, 10, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 
                        10, 7, 7, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 
                        10, 10, 10, 10, 7, 7, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 
                        10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 
                        10, 10, 10, 10, 10, 10, 10, 10, 7, 7, 10, 10, 10, 10, 10, 10, 
                        9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 7, 7, 10, 10, 9, 9, 
                        9, 10, 9, 9, 8, 8, 8, 8, 8, 8, 9, 9, 9, 7, 8, 8, 8, 9, 9, 9, 
                        9, 9, 10, 9, 10, 10, 9, 10, 10, 9, 10, 7, 7, 8, 8, 8, 8, 8, 8, 
                        8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8)), row.names = c(NA, -166L), class = c("tbl_df", 

Plot of countries and indic.no across years

代码语言:javascript
复制
#Want countries, that have indic.no = 10 across ALL years between 2000 to 2016
#Here I thought I am selecting all years between 2000 to 2016 AND where indic.no equals 10

df2 <-df %>%
  group_by(ISO3, NAME_0)%>%
  filter(all(Year %in%(2000:2016)) & indic.no == 10)

然而,它似乎只给了我"BRB",而我希望也有"ABW",“AUS”和"COL“。

Filtered data plot

我花了这么多时间在这个过滤问题上,看不出我哪里错了。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-05-06 04:00:04

获得“在2000到2016年间所有年份的indic.no = 10的国家”(假设您不需要出于任何原因保留其他数据)的最简单方法是分离过滤步骤,并在indic.no周围使用all

代码语言:javascript
复制
library(dplyr)
df %>% 
  group_by(ISO3, NAME_0) %>%
  filter(between(Year, 2000, 2016)) %>% 
  filter(all(indic.no == 10)) %>% 
  ungroup %>% 
  pull(ISO3) %>% unique()

[1] "ABW" "AUS" "BRB" "COL"
票数 0
EN

Stack Overflow用户

发布于 2021-05-06 00:01:45

这是最简单的方法。在按'ISO3‘和’filter _0‘分组后,通过对'indic.no’范围内的‘all’进行子集设置来使用单个名称,并检查值的名称是否为10

代码语言:javascript
复制
library(dplyr)
df2 <-  df %>%
   group_by(ISO3, NAME_0)%>%
   filter(all(indic.no[Year %in% 2000:2016] == 10))

unique(df2$ISO3)
#[1] "ABW" "AUS" "BRB" "COL"
票数 0
EN

Stack Overflow用户

发布于 2021-05-06 00:06:20

我的方法是:

代码语言:javascript
复制
df <- tibble::tibble(ISO3 = c("ABW", "ABW", "ABW", "ABW", "ABW", "ABW", 
                        "ABW", "ABW", "ABW", "ABW", "ABW", "ABW", "ABW", "ABW", "ABW", 
                        "ABW", "ABW", "ABW", "ABW", "ARE", "ARE", "ARE", "ARE", "ARE", 
                        "ARE", "ARE", "ARE", "ARE", "ARE", "ARE", "ARE", "ARE", "ARE", 
                        "ARE", "ARE", "ARE", "ARE", "ARE", "AUS", "AUS", "AUS", "AUS", 
                        "AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "AUS", 
                        "AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "BRB", "BRB", "BRB", 
                        "BRB", "BRB", "BRB", "BRB", "BRB", "BRB", "BRB", "BRB", "BRB", 
                        "BRB", "BRB", "BRB", "BRB", "BRB", "COL", "COL", "COL", "COL", 
                        "COL", "COL", "COL", "COL", "COL", "COL", "COL", "COL", "COL", 
                        "COL", "COL", "COL", "COL", "COL", "COL", "FJI", "FJI", "FJI", 
                        "FJI", "FJI", "FJI", "FJI", "FJI", "FJI", "FJI", "FJI", "FJI", 
                        "FJI", "FJI", "FJI", "FJI", "FJI", "FJI", "FJI", "KIR", "KIR", 
                        "KIR", "KIR", "KIR", "KIR", "KIR", "KIR", "KIR", "KIR", "KIR", 
                        "KIR", "KIR", "KIR", "KIR", "KIR", "KIR", "KIR", "PNG", "PNG", 
                        "PNG", "PNG", "PNG", "PNG", "PNG", "PNG", "PNG", "PNG", "PNG", 
                        "PNG", "PNG", "PNG", "PNG", "PNG", "PNG", "PNG", "PNG", "VCT", 
                        "VCT", "VCT", "VCT", "VCT", "VCT", "VCT", "VCT", "VCT", "VCT", 
                        "VCT", "VCT", "VCT", "VCT", "VCT", "VCT", "VCT"), 
               NAME_0 = c("Aruba", "Aruba", "Aruba", "Aruba", "Aruba", "Aruba", "Aruba", "Aruba", 
                          "Aruba", "Aruba", "Aruba", "Aruba", "Aruba", "Aruba", "Aruba", 
                          "Aruba", "Aruba", "Aruba", "Aruba", "United Arab Emirates", "United Arab Emirates", 
                          "United Arab Emirates", "United Arab Emirates", "United Arab Emirates", 
                          "United Arab Emirates", "United Arab Emirates", "United Arab Emirates", 
                          "United Arab Emirates", "United Arab Emirates", "United Arab Emirates", 
                          "United Arab Emirates", "United Arab Emirates", "United Arab Emirates", 
                          "United Arab Emirates", "United Arab Emirates", "United Arab Emirates", 
                          "United Arab Emirates", "United Arab Emirates", "Australia", 
                          "Australia", "Australia", "Australia", "Australia", "Australia", 
                          "Australia", "Australia", "Australia", "Australia", "Australia", 
                          "Australia", "Australia", "Australia", "Australia", "Australia", 
                          "Australia", "Australia", "Australia", "Barbados", "Barbados", 
                          "Barbados", "Barbados", "Barbados", "Barbados", "Barbados", "Barbados", 
                          "Barbados", "Barbados", "Barbados", "Barbados", "Barbados", "Barbados", 
                          "Barbados", "Barbados", "Barbados", "Colombia", "Colombia", "Colombia", 
                          "Colombia", "Colombia", "Colombia", "Colombia", "Colombia", "Colombia", 
                          "Colombia", "Colombia", "Colombia", "Colombia", "Colombia", "Colombia", 
                          "Colombia", "Colombia", "Colombia", "Colombia", "Fiji", "Fiji", 
                          "Fiji", "Fiji", "Fiji", "Fiji", "Fiji", "Fiji", "Fiji", "Fiji", 
                          "Fiji", "Fiji", "Fiji", "Fiji", "Fiji", "Fiji", "Fiji", "Fiji", 
                          "Fiji", "Kiribati", "Kiribati", "Kiribati", "Kiribati", "Kiribati", 
                          "Kiribati", "Kiribati", "Kiribati", "Kiribati", "Kiribati", "Kiribati", 
                          "Kiribati", "Kiribati", "Kiribati", "Kiribati", "Kiribati", "Kiribati", 
                          "Kiribati", "Papua New Guinea", "Papua New Guinea", "Papua New Guinea", 
                          "Papua New Guinea", "Papua New Guinea", "Papua New Guinea", "Papua New Guinea", 
                          "Papua New Guinea", "Papua New Guinea", "Papua New Guinea", "Papua New Guinea", 
                          "Papua New Guinea", "Papua New Guinea", "Papua New Guinea", "Papua New Guinea", 
                          "Papua New Guinea", "Papua New Guinea", "Papua New Guinea", "Papua New Guinea", 
                          "Saint Vincent and the Grenadines", "Saint Vincent and the Grenadines", 
                          "Saint Vincent and the Grenadines", "Saint Vincent and the Grenadines", 
                          "Saint Vincent and the Grenadines", "Saint Vincent and the Grenadines", 
                          "Saint Vincent and the Grenadines", "Saint Vincent and the Grenadines", 
                          "Saint Vincent and the Grenadines", "Saint Vincent and the Grenadines", 
                          "Saint Vincent and the Grenadines", "Saint Vincent and the Grenadines", 
                          "Saint Vincent and the Grenadines", "Saint Vincent and the Grenadines", 
                          "Saint Vincent and the Grenadines", "Saint Vincent and the Grenadines", 
                          "Saint Vincent and the Grenadines"),
               Year = c(2000, 2001, 2002, 
                        2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 
                        2014, 2015, 2016, 2017, 2018, 2000, 2001, 2002, 2003, 2004, 2005, 
                        2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 
                        2017, 2018, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 
                        2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2000, 
                        2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 
                        2012, 2013, 2014, 2015, 2016, 2000, 2001, 2002, 2003, 2004, 2005, 
                        2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 
                        2017, 2018, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 
                        2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2000, 
                        2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 
                        2012, 2013, 2014, 2015, 2016, 2017, 2000, 2001, 2002, 2003, 2004, 
                        2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 
                        2016, 2017, 2018, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 
                        2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016),
               indic.no = c(10, 
                            10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 
                            7, 7, 10, 10, 10, 10, 10, 10, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 
                            10, 7, 7, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 
                            10, 10, 10, 10, 7, 7, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 
                            10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 
                            10, 10, 10, 10, 10, 10, 10, 10, 7, 7, 10, 10, 10, 10, 10, 10, 
                            9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 7, 7, 10, 10, 9, 9, 
                            9, 10, 9, 9, 8, 8, 8, 8, 8, 8, 9, 9, 9, 7, 8, 8, 8, 9, 9, 9, 
                            9, 9, 10, 9, 10, 10, 9, 10, 10, 9, 10, 7, 7, 8, 8, 8, 8, 8, 8, 
                            8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8)
           )

library(dplyr)
df %>%
  filter(between(Year, 2000, 2016), indic.no==10) %>% 
  select(ISO3, NAME_0) %>% 
  distinct()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67404708

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档