R - Суммирующий процент по подгруппам - PullRequest
1 голос
/ 31 октября 2019

Я не знаю, как объяснить мою проблему, но я хочу обобщить категории distance и получить процент за каждую дистанцию ​​в месяц. В моей таблице 1 неделя составляет 100%, и теперь я хочу рассчитать то же самое для месяца, но используя процент от недель. Что-то вроде суммы (процентов) / количества недель в этом месяце. Вот что у меня есть:

  year  month year_week distance object_remarks        weeksum percent
 1 2017  05    2017_21   15       ctenolabrus_rupestris       3  0.75  
 2 2017  05    2017_21   10       ctenolabrus_rupestris       1  0.25  
 3 2017  05    2017_22   5        ctenolabrus_rupestris       5  0.833 
 4 2017  05    2017_22   0        ctenolabrus_rupestris       1  0.167
 5 2017  06    2017_22   0        ctenolabrus_rupestris       9  1   
 6 2017  06    2017_23   20       ctenolabrus_rupestris       6  0.545 
 7 2017  06    2017_23   0        ctenolabrus_rupestris       5  0.455 

Я хочу получить такой вывод:

  year  month  distance object_remarks        weeksum percent percent_month
 1 2017  05    15       ctenolabrus_rupestris       3  0.75           0.375
 2 2017  05    10       ctenolabrus_rupestris       1  0.25          0.1225
 3 2017  05    5        ctenolabrus_rupestris       5  0.833         0.4165 
 4 2017  05    0        ctenolabrus_rupestris       1  0.167         0.0835

 5 2017  06    0        ctenolabrus_rupestris       14 1.455         0.7275
 6 2017  06    20       ctenolabrus_rupestris       6  0.545         0.2775

Спасибо большое!

Ответы [ 3 ]

0 голосов
/ 31 октября 2019

Это не работает. Вот что я получаю:

  year_week year  month distance object_remarks       weeksum percent percent_month
   <chr>     <chr> <chr> <fct>    <fct>                  <dbl>   <dbl>         <dbl>
 1 2017_21   2017  05    15       ctenolabrus_rupestr…       3   0.75         0.0672
 2 2017_21   2017  05    10       ctenolabrus_rupestr…       1   0.25         0.0224
 3 2017_22   2017  05    5        ctenolabrus_rupestr…       6   1.83         0.164 
 4 2017_22   2017  05    0        ctenolabrus_rupestr…       5   2.17         0.194 
 5 2017_22   2017  06    0        ctenolabrus_rupestr…      21   2.2          0.117 
 6 2017_23   2017  06    20       ctenolabrus_rupestr…       9   0.970        0.0515
 7 2017_23   2017  06    0        ctenolabrus_rupestr…      21   2.2          0.117 
0 голосов
/ 01 ноября 2019

Каким-то образом R вычисляет процент_месяц, разделенный на весь месяц вместе, а не только на число для нужного месяца.

Итак, я сделал это

week_perc$year_week <- NULL

week_perc$month <- as.integer(week_perc$month)

week_perc %>% group_by(month, distance) %>%
  mutate(percent = sum(percent), weeksum = sum(weeksum)) %>%
  distinct %>%
  group_by(month) %>%
  mutate(percent_month = percent/sum(month))

и получил

  year  month distance object_remarks        weeksum percent percent_month
   <chr> <int> <chr>    <fct>                   <dbl>   <dbl>         <dbl>
 1 2017      5 10       ctenolabrus_rupestris       1   0.25        0.00833
 2 2017      5 15       ctenolabrus_rupestris       3   0.75        0.025  
 3 2017      5 0        ctenolabrus_rupestris       5   2.17        0.0722 
 4 2017      5 5        ctenolabrus_rupestris       6   1.83        0.0611 
 5 2017      6 0        ctenolabrus_rupestris      21   2.2         0.0524 
 6 2017      6 20       ctenolabrus_rupestris       9   0.970       0.0231 

Я пробовал разные вещи, но я не уверен, что сделал неправильно. Сказать, что у меня есть следующий месяц в моих данных: 05-2017, 06-2017, 07-2017, 08-2017, 05-2018, 06-2018, 07-2018, 08-2019, 09-2018.

Так 2 раза в месяц. Но это не должно быть проблемой.

0 голосов
/ 31 октября 2019

Возможно, вам придется использовать group_by() дважды.

df %>%
  select(-year_week) %>%
  group_by(month, distance) %>%
  mutate(percent = sum(percent), weeksum = sum(weeksum)) %>%
  distinct %>%
  group_by(month) %>%
  mutate(percent_month = percent/sum(percent))

# A tibble: 6 x 7
# Groups:   month [2]
#    year month distance object_remarks        weeksum percent percent_month
#   <int> <int>    <int> <chr>                   <int>   <dbl>         <dbl>
# 1  2017     5       15 ctenolabrus_rupestris       3   0.75         0.375 
# 2  2017     5       10 ctenolabrus_rupestris       1   0.25         0.125 
# 3  2017     5        5 ctenolabrus_rupestris       5   0.833        0.416 
# 4  2017     5        0 ctenolabrus_rupestris       1   0.167        0.0835
# 5  2017     6        0 ctenolabrus_rupestris      14   1.46         0.728 
# 6  2017     6       20 ctenolabrus_rupestris       6   0.545        0.272 
...