Как я могу исключить целые строки на основе одного наблюдения в моем r данных? - PullRequest
1 голос
/ 18 апреля 2020

У меня есть база данных стран, которые получили определенные баллы (polity2) за каждый год до 2018 года. Я буду sh, чтобы удалить из страны все страны, которые не набрали 6 или выше непрерывно с 1998 по 2018. Мне удалось создать подмножество, включающее только страны, набравшие 6+ баллов за период 1998-2018 гг. с помощью этого кода:


    polity4 <- polity4[,c("scode", "country", "year",
                          "democ", "autoc", "polity2")]

    #storing subset of countries that fit the criteria of having Polity2 scores of 6 or above from 1998 to 2018

    democratic <- subset(polity4, (year>1997 & polity2 >= 6)) 

Вот как выглядит теперь фрейм данных :

 scode country        year democ autoc polity2
   <chr> <chr>         <dbl> <dbl> <dbl>   <dbl>
 1 USA   United States  1998    10     0      10
 2 USA   United States  1999    10     0      10
 3 USA   United States  2000    10     0      10
 4 USA   United States  2001    10     0      10
 5 USA   United States  2002    10     0      10
 6 USA   United States  2003    10     0      10
 7 USA   United States  2004    10     0      10
 8 USA   United States  2005    10     0      10
 9 USA   United States  2006    10     0      10
10 USA   United States  2007    10     0      10

Однако я теперь буду sh, чтобы создать способ циклически проходить через подмножество и удалять строки, которые появляются из-за того, что страна набрала очки, они набрали 6+ хотя бы один раз в течение периода, но не непрерывно в течение 20 лет.

Я попытался создать новый столбец, в котором подсчитываются случаи появления страны в новом подмножестве (для того, чтобы она была непрерывной, должно быть меньше 21 ), чтобы использовать это в l oop:

democratic$count <- democratic[,c("scode")] %>% group_by(scode) %>% mutate(count = n())

Однако я экспериментировал с использованием by (), но не могу понять, как создать этот l oop.

Извините, если я сделал это слишком сложным, или если это глупый вопрос, и заранее спасибо.

РЕДАКТИРОВАТЬ: вот часть текущего кадра данных:

scode country  year democ autoc polity2
   <chr> <chr>   <dbl> <dbl> <dbl>   <dbl>
 1 RUM   Romania  1998     8     0       8
 2 RUM   Romania  1999     8     0       8
 3 RUM   Romania  2000     8     0       8
 4 RUM   Romania  2001     8     0       8
 5 RUM   Romania  2002     8     0       8
 6 RUM   Romania  2003     8     0       8
 7 RUM   Romania  2004     9     0       9
 8 RUM   Romania  2005     9     0       9
 9 RUM   Romania  2006     9     0       9
10 RUM   Romania  2007     9     0       9
11 RUM   Romania  2008     9     0       9
12 RUM   Romania  2009     9     0       9
13 RUM   Romania  2010     9     0       9
14 RUM   Romania  2011     9     0       9
15 RUM   Romania  2012     9     0       9
16 RUM   Romania  2013     9     0       9
17 RUM   Romania  2014     9     0       9
18 RUM   Romania  2015     9     0       9
19 RUM   Romania  2016     9     0       9
20 RUM   Romania  2017     9     0       9
21 RUM   Romania  2018     9     0       9
22 RUS   Russia   2000     6     0       6
23 RUS   Russia   2001     6     0       6
24 RUS   Russia   2002     6     0       6
25 RUS   Russia   2003     6     0       6
26 RUS   Russia   2004     6     0       6
27 RUS   Russia   2005     6     0       6
28 RUS   Russia   2006     6     0       6
29 EST   Estonia  1998     7     1       6
30 EST   Estonia  1999     8     1       7

Принимая во внимание, что с Румынией все в порядке, так как она постоянно набирала 6 и более баллов с 1998 по 2018 год, Россия набрала только 6 и более баллов в 2000-06 гг., И поэтому не соответствует непрерывным критериям, которые я ищу, и должна быть удалена. *

1 Ответ

0 голосов
/ 18 апреля 2020

Мы можем complete пропустить наблюдения years для каждого country и выбрать только те страны, где значения all в polity2 больше, чем равно 6.

library(dplyr)

df %>%
 tidyr::complete(country, year, fill = list(polity2 = 0)) %>% 
 filter(year %in% 1998:2018) %>%
 group_by(country) %>%
 filter(all(polity2 >= 6))

#   country year scode democ autoc polity2
#1  Romania 1998   RUM     8     0       8
#2  Romania 1999   RUM     8     0       8
#3  Romania 2000   RUM     8     0       8
#4  Romania 2001   RUM     8     0       8
#5  Romania 2002   RUM     8     0       8
#6  Romania 2003   RUM     8     0       8
#7  Romania 2004   RUM     9     0       9
#8  Romania 2005   RUM     9     0       9
#9  Romania 2006   RUM     9     0       9
#10 Romania 2007   RUM     9     0       9
#11 Romania 2008   RUM     9     0       9
#12 Romania 2009   RUM     9     0       9
#13 Romania 2010   RUM     9     0       9
#14 Romania 2011   RUM     9     0       9
#15 Romania 2012   RUM     9     0       9
#16 Romania 2013   RUM     9     0       9
#17 Romania 2014   RUM     9     0       9
#18 Romania 2015   RUM     9     0       9
#19 Romania 2016   RUM     9     0       9
#20 Romania 2017   RUM     9     0       9
#21 Romania 2018   RUM     9     0       9
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...