R summarize()分组摘要

summarize()分组摘要分组平均值最大最小值计数

library(nycflights13)
library(tidyverse)

summarize()可以将数据折叠成一行
如果不与group_by()一起使用,那么summarize()也没什么用

summarize(flights, delay = mean(dep_delay, na.rm = TRUE))
delay
12.63907

group_by()可以将分析数据集改为单个分组

by_day <- group_by(flights,year,month,day)
summarize(by_day,delay=mean(dep_delay,na.rm=TRUE))

image-20220320114851862

通过summarize可以起到mutate的作用

by_dest <- group_by(flights,dest)
delay <- summarize(by_dest,
                   count = n(),
                   dist = mean(distance, na.rm = TRUE),
                   delay = mean(arr_delay, na.rm = TRUE))
ggplot(data=delay,mapping=aes(x=dist,y=delay))+
  geom_point(aes(size=count),alpha=1/3)+
  geom_smooth(se=FALSE)

image-20220320120257405

常用的摘要统计量

分组求和、求平均值、计数等等。

思路是group_by统计量,summarize(count = n())

#先选出没有取消的航班
not_cancelled <- flights %>% 
  filter(!is.na(dep_delay),!is.na(arr_delay))
#平均延误时间
not_cancelled %>% 
  group_by(year,month,day) %>% 
  summarize(mean=mean(dep_delay))

image-20220320120640723

摘要函数名称
位置度量mean() median()
分散程度度量sd() IQR() mad()
秩的度量min() quantile() max()
定位度量first() nth() last()
计数n()
#位置度量
not_cancelled %>% 
  group_by(year,month,day) %>% 
  summarize(
    #平均延误时间
    avg_delay1=mean(arr_delay),
    #平均延误纠正时间 (只选择大于0
    avg_delay2=mean(arr_delay[arr_delay>0])
  )
yearmonthdayavg_delay1avg_delay2
20131112.651022932.48156
20131212.692887932.02991
2013135.733333327.66087
201314-1.932819428.30976
201315-1.525802022.55882
2013164.236429424.37270
201317-4.947311827.76132
201318-3.227578520.78909
201319-0.264277725.63415
2013110-5.898815927.34545
#分散程度度量
not_cancelled %>% 
  group_by(dest) %>% 
  summarize(distace_sd=sd(distance)) %>% 
  arrange(desc(distace_sd))
destdistace_sd
EGE10.542765
SAN10.350094
SFO10.216017
HNL10.004197
SEA9.977993
LAS9.907786
PDX9.873299
PHX9.862546
LAX9.657195
IND9.458066
CVG9.018212
SAT9.005084
#秩的度量min(x),quantile(x,0.25),max(x)
#每天最早和最晚出发的航班
not_cancelled %>% 
  group_by(year,month,day) %>% 
  summarize(
    first=min(dep_time),
    last=max(dep_time)
  )
yearmonthdayfirstlast
2013115172356
201312422354
201313322349
201314252358
201315142357
201316162355
201317492359
2013184542351
20131922252
201311032320
#计数(唯一值数量 n_distinct())
#哪个目的地有最多的航空公司
not_cancelled %>% 
  group_by(dest) %>% 
  summarize(carriers=n_distinct(carrier)) %>% 
  arrange(desc(carriers))
destcarriers
ATL7
BOS7
CLT7
ORD7
TPA7
AUS6
DCA6
#只需要计数的情况
# 无需摘要统计
not_cancelled %>% 
  count(dest)
#逻辑值计数和比例
#多少航班是在5点前出发的
not_cancelled %>% 
  group_by(year,month,day) %>% 
  summarize(n_early=sum(dep_time<500))
#或者写为
not_cancelled %>% 
  group_by(year,month,day) %>% 
  summarize(early= dep_time[dep_time<500]) %>% 
  summarize(n=n())

注意区分上面的

#位置度量
not_cancelled %>% 
  group_by(year,month,day) %>% 
  summarize(
    #平均延误时间
    avg_delay1=mean(arr_delay),
    #平均延误纠正时间 (只选择大于0
    avg_delay2=mean(arr_delay[arr_delay>0])
  )

#航班延误1小时的比例
#因为arr_delay>60是返回的一堆逻辑值110001求mean是比例
not_cancelled %>% 
  group_by(year,month,day) %>% 
  summarize(hour_prec=mean(arr_delay>60))
  • sum(dep_time<500): 这个是求dep_time小于500的个数,因为dep_time<500会先生成0,1的布尔列,求和就是1的数量

  • dep_time[dep_time<500] %>% summarize(n=n()):和上面一样,相当于先摘要出dep_time<500的,再计数

  • mean(arr_dalay): 对所有的arr_dalay求平均

  • mean(arr_delay[arr_delay>0]):只求arr_delay大于0的平均值

  • mean(add_delay>60),求的是arr_delay大于60的比例

  • dep_time[dep_time<500] %>% summarize(n=n()):和上面一样,相当于先摘要出dep_time<500的,再计数

  • mean(arr_dalay): 对所有的arr_dalay求平均

  • mean(arr_delay[arr_delay>0]):只求arr_delay大于0的平均值

  • mean(add_delay>60),求的是arr_delay大于60的比例

  • mean(add_delay[arr_delay>60]): 只求arr_delay大于60的平均值

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

地学万事屋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值