按子组汇总百分比

时间:2019-10-31 11:18:37

标签: r group-by dplyr

我不知道如何解释我的问题,但是我想总结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 :(得分:0)

您可能需要两次使用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 

答案 1 :(得分:0)

不起作用。 这就是我得到的:

  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 

答案 2 :(得分:0)

R以某种方式计算出%_month,除以所有月份的总和,不只是所需月份的数字。

所以我做到了

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。

每月两次。但这不应该是问题。