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))+
groupby是什么函数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()
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论