R语言中的group_by()和summarise()

group_by():定义分组变量,summarise():汇总总结

dplyr分两步完成汇总
1.用group_by定义分组变量
2.用一行summarise代码描述如何对每组汇总。

3.1group_by这个函数只是定义分组变量,并没有改变数据的结构。

3.2summarise():汇总总结,和一些函数协作。

  • 计数:n()、n_distinct(x)
  • 中间值:mean(x)、median(x)
  • 离散程度sd()、mad(x)、IQR(x)
  • 极端值quartile(x)、min(x)、max(x)
  • 位置first()、last()、nth()

例如要想看不同净度的钻石的平均价格可以通过下面的代码实现。

library(ggplot2) #diamonds数据集在这个包里面
library(dplyr) #两个函数在这里面
by_clarity <- group_by(diamonds,clarity)#对diamonds按照clarity定义分组(并没有实际分组)
sum_clarity <- summarise(by_clarity,price=mean(price))
sum_clarity
ggplot(sum_clarity,aes(clarity,price))+
  geom_line(aes(group=1),colour="grey80")+geom_point(size=2)

这个图中净度更高时价格却低了。在后面会解决。

下面我们对刚才的分净度平均价格做一个补充:增加每组的计数和上下四分位点。这显示出均值对这个数据的汇总效果并不好,因为价格的分布是偏态的:在某些组内,均值甚至比上四分位数还高。

by_clarity <- diamonds%>%
  group_by(clarity)%>%
  summarise(
    n=n(),mean=mean(price),lq=quantile(price,0.25),up=quantile(price,0.75)
  )
by_clarity 
ggplot(by_clarity,aes(clarity,mean))+
  geom_linerange(aes(ymin=lq,ymax=up))+
  geom_line(aes(group=),colour="grey50")+
  geom_point(aes(size=n))

我们也可以多个变量分组。
接下来的例子就是展示计算一个展现切工和深度关系的频率多边形。

cut_depth <- summarise(group_by(diamonds,cut,depth),n=n())
cut_depth <- filter(cut_depth,depth>55,depth < 70)
cut_depth
ggplot(cut_depth,aes(depth,n,colour=cut))+geom_line()

# 我们可以将计数转换为比例,这样更方便在各个切工中比较
cut_depth <- mutate(cut_depth,prop=n/sum(n))
ggplot(cut_depth,aes(depth,prop,colour=cut))+geom_line()
  • 10
    点赞
  • 95
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值