Измерение годового отставания по сгруппированной переменной - PullRequest
0 голосов
/ 04 марта 2019

Данные:

nominal_roll1 <- tribble(~"Grade",~"1991-92", ~"1992-93", ~"1993-94", ~"1994-95", ~"1995-96",~"1996-97", ~"1997-98", ~"1998-99", ~"1999-00", ~"2000-01", ~"2001-02",~"2002-03", ~"2003-04", ~"2004-05", ~"2005-06", ~"2006-07", ~"2007-08",~"2008-09", ~"2009-10", ~"2010-11", ~"2011-12", ~"2012-13", ~"2013-14",~"2014-15", ~"2015-16", ~"2016-17", ~"2017-18",
        "K4",   88,92,99,101,90,99,103,111,95,92,84,92,107,86,93,82,98,92,96,121,154,137,137,145,155,160,160,
        "K5",   87,89,88,102,107,94,102,106,111,102,98,88,72,89,84,108,82,115,98,93,121,154,137,137,145,155,160,
        "Gr. 1",    107,102,105,104,122,114,119,134,111,125,120,113,118,121,104,109,103,113,135,88,93,121,154,137,137,137,155,
        "Gr. 2",    90,113,100,109,99,118,102,105,130,104,132,128,114,108,97,99,109,98,97,87,88,93,121,154,137,137,137,
        "Gr. 3",    81,86,102,102,112,108,119,103,112,121,105,121,107,113,90,101,93,101,102,97,87,88,93,121,154,154,137,
        "Gr. 4",    67,84,86,91,88,105,111,113,94,114,122,127,138,109,92,92,99,89,98,90,97,87,88,93,121,121,154,
        "Gr. 5",    67,76,84,94,96,97,117,112,119,109,106,104,121,145,100,102,90,103,94,98,90,97,87,88,93,93,121,
        "Gr. 6",    66,76,74,83,92,95,81,113,105,102,106,106,100,115,120,107,101,89,106,127,98,90,97,87,88,88,93,
        "Gr. 3",    81,77,86,85,88,88,112,96,113,110,120,111,120,121,94,126,103,110,93,83,127,98,90,97,87,87,88,
        "Gr. 8",    59,76,71,68,84,74,48,85,94,85,102,124,131,111,84,113,123,104,111,88,83,127,98,90,97,97,87,
        "Sr. 1",    62,62,64,89,77,73,90,82,104,122,120,106,103,177,138,149,152,174,184,88,111,83,127,98,90,90,97,
        "Sr. 2",    55,78,62,68,62,76,71,131,69,85,130,132,113,141,91,175,125,159,182,182,184,111,83,127,98,98,90,
        "Sr. 3",    3,71,60,51,66,44,53,97,75,59,82,143,136,136,76,108,144,126,98,98,182,184,88,83,127,127,98,
        "SR. 4",    0,66,65,32,49,67,83,56,77,45,79,68,182,160,69,121,97,127,157,157,98,182,59,88,83,83,127,
        "MSP",  0,1,1,1,0,0,0,0,0,0,16,20,41,10,22,36,42,38,51,NA,NA,NA,20,NA,NA,NA,NA)

nominal_tidy1 <- nominal_roll1 %>%
  mutate(FakeCrudeBirthRate = rnorm(nrow(.), mean = 12.5, sd = .5),
         FakeFertilityRate = rnorm(nrow(.), mean = 2.2, sd = .05)) %>% 
  gather(Year, Attendance, `1991-92`:`2017-18`) %>%
  mutate(Year_ = as.numeric(str_trunc(.$Year, side = "right", width = 4, ellipsis = "")),
         Grade = factor(Grade, levels = c("K4","K5","Gr. 1","Gr. 2","Gr. 3","Gr. 4","Gr. 5","Gr. 6","Gr. 7",
                                          "Gr. 8","Sr. 1", "Sr. 2", "Sr. 3", "Sr. 4", "MSP")))


Для расчета годового изменения я могу использовать lag():

nominal_tidy1 %>% 
  group_by(Year_) %>% 
  summarise(sum = sum(Attendance)) %>% 
  mutate(diff = sum-lag(sum),
         perc_diff = diff/sum*100)
Year_   sum  diff perc_diff
   <dbl> <dbl> <dbl>     <dbl>
 1  1991   913    NA    NA    
 2  1992  1149   236    20.5  
 3  1993  1147    -2    -0.174
 4  1994  1180    33     2.80 
 5  1995  1232    52     4.22 
 6  1996  1252    20     1.60 
 7  1997  1311    59     4.50 
 8  1998  1444   133     9.21 
 9  1999  1409   -35    -2.48 
10  2000  1375   -34    -2.47 


Но когда я хочу рассчитать изменение по группе(оценка), использование arrange() не меняет порядок для сравнения годового изменения по классам, например, год1 класс1 против года2 класс1.

nominal_tidy1 %>% 
  mutate(Grade = as.character(Grade)) %>% 
  group_by(Year_, Grade) %>%
  arrange(desc(Grade)) %>% 
  summarise(sum = sum(Attendance)) %>% 
  mutate(diff = sum-lag(sum),
         perc_diff = diff/sum*100)

Что неверно, и даже если бы оно было правильным, оно не было бы очень надежным, так как это было бы предметом arrange().

Не уверен, что я ошибаюсь при использовании lag (), должен ли я просто измерить его по исходному df, а не по tidy, или как.Спасибо за помощь.Я хотел бы отметить, что этот вопрос очень похож, однако ответы кажутся слишком сложными для нужд анализа.

1 Ответ

0 голосов
/ 04 марта 2019

В данном случае это аргументы для arrange(), которые необходимо переключить, а NA оценки опустить.

nominal_tidy1 %>% 
  mutate(Grade = as.character(Grade)) %>% 
  group_by(Grade, Year_) %>%
  arrange(desc(Grade)) %>% 
  summarise(sum = sum(Attendance)) %>% 
  mutate(diff = sum-lag(sum),
         perc_diff = diff/sum*100) %>%
  na.omit()

Результат

# A tibble: 325 x 5
# Groups:   Grade [13]
   Grade Year_   sum  diff perc_diff
   <chr> <dbl> <dbl> <dbl>     <dbl>
 1 Gr. 1  1992   102    -5    -4.90 
 2 Gr. 1  1993   105     3     2.86 
 3 Gr. 1  1994   104    -1    -0.962
 4 Gr. 1  1995   122    18    14.8  
 5 Gr. 1  1996   114    -8    -7.02 
 6 Gr. 1  1997   119     5     4.20 
 7 Gr. 1  1998   134    15    11.2  
 8 Gr. 1  1999   111   -23   -20.7  
 9 Gr. 1  2000   125    14    11.2  
10 Gr. 1  2001   120    -5    -4.17 
# … with 315 more rows
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...