使用group_by查找子组中的百分比并进行汇总 [英] Finding percentage in a sub-group using group_by and summarise

查看:129
本文介绍了使用group_by查找子组中的百分比并进行汇总的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是新来的,并且试图进行以下转换,没有任何运气。我在互联网上进行了搜索,我发现了在ddply中做同样的例子,但是我想使用dplyr。



我有以下数据: p>

 月类型计数
1 Feb-14 bbb 341
2 Feb-14 ccc 527
3 Feb-14 aaa 2674
4 Mar-14 bbb 811
5 Mar-14 ccc 1045
6 Mar-14 aaa 4417
7 Apr-14 bbb 1178
8 4月14日ccc 1192
9四月-14 aaa 4793
10五月-14 bbb 916
.. ... ... ...

我想使用dplyr来计算每个类型(aaa,bbb,ccc)在一个月级别的百分比,即

 每个
的月份类型计数1 Feb-14 bbb 341 9.6%
2 Feb-14 ccc 527 14.87%
3 Feb-14 aaa 2674 ..
.. ... ... ...

我试过

  data%>%
group_by(month,type)%>%
summary(count / sum(count))

这将给出1作为每个值。如何在本月的所有类型中计算总和?

解决方案

尝试

  library(dplyr)
data%>%
group_by(month)%>%
mutate(countT = sum(count))%>%
group_by(type,add = TRUE)%>%
mutate(per = paste0(round(100 * count / countT,2),'%' ))

我们还可以使用 left_join 总结 sum(count) by'month'



或使用数据的选项。表

  library(data.table)
setkey(setDT(data),month)[data [,list = sum(count)),month],
per:= paste0(round(100 * count / i.count,2),'%')] []


I am new to dplyr and trying to do the following transformation without any luck. I've searched across the internet and I have found examples to do the same in ddply but I'd like to use dplyr.

I have the following data:

   month   type  count
1  Feb-14  bbb   341
2  Feb-14  ccc   527
3  Feb-14  aaa  2674
4  Mar-14  bbb   811
5  Mar-14  ccc  1045
6  Mar-14  aaa  4417
7  Apr-14  bbb  1178
8  Apr-14  ccc  1192
9  Apr-14  aaa  4793
10 May-14  bbb   916
..    ...  ...   ...

I want to use dplyr to calculate the percentage of each type (aaa, bbb, ccc) at a month level i.e.

   month   type  count  per
1  Feb-14  bbb   341    9.6%
2  Feb-14  ccc   527    14.87%
3  Feb-14  aaa  2674    ..
..    ...  ...   ...

I've tried

data %>%
  group_by(month, type) %>%
  summarise(count / sum(count))

This gives a 1 as each value. How do I make the sum(count) sum across all the types in the month?

解决方案

Try

library(dplyr)
data %>%
    group_by(month) %>%
    mutate(countT= sum(count)) %>%
    group_by(type, add=TRUE) %>%
    mutate(per=paste0(round(100*count/countT,2),'%'))

We could also use left_join after summarising the sum(count) by 'month'

Or an option using data.table.

 library(data.table)
 setkey(setDT(data), month)[data[, list(count=sum(count)), month], 
               per:= paste0(round(100*count/i.count,2), '%')][]

这篇关于使用group_by查找子组中的百分比并进行汇总的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆