我正在尝试过滤从2000年到2016年的国家,在这些国家,indic.no在所有年份都必须等于10。
我尝试使用多个条件的不同过滤,但似乎从未得到预期的结果。
#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
#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“。
我花了这么多时间在这个过滤问题上,看不出我哪里错了。
发布于 2021-05-06 04:00:04
获得“在2000到2016年间所有年份的indic.no = 10的国家”(假设您不需要出于任何原因保留其他数据)的最简单方法是分离过滤步骤,并在indic.no周围使用all
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"发布于 2021-05-06 00:01:45
这是最简单的方法。在按'ISO3‘和’filter _0‘分组后,通过对'indic.no’范围内的‘all’进行子集设置来使用单个名称,并检查值的名称是否为10
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"发布于 2021-05-06 00:06:20
我的方法是:
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()https://stackoverflow.com/questions/67404708
复制相似问题