• R summarize()分组摘要


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

    library(nycflights13)
    library(tidyverse)
    
    • 1
    • 2

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

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

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

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

    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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    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))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    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])
      )
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    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))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    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)
      )
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    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))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    destcarriers
    ATL7
    BOS7
    CLT7
    ORD7
    TPA7
    AUS6
    DCA6
    #只需要计数的情况
    # 无需摘要统计
    not_cancelled %>% 
      count(dest)
    
    • 1
    • 2
    • 3
    • 4
    #逻辑值计数和比例
    #多少航班是在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())
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    注意区分上面的

    #位置度量
    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))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 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的平均值

  • 相关阅读:
    基于JAVA高校学生资助管理信息系统计算机毕业设计源码+数据库+lw文档+系统+部署
    Self-adaptive Differential Evolution with Neighborhood Search
    HTML登录页面
    C++系列-左移运算符重载
    cups4j实现打印
    Day40-Servlet原理、Mapping问题、ServletContext
    mysql——数据库之间的迁移
    Linux上安装Redis教程
    Redis高可用系列——ZSet类型
    html滑动文章标题置顶
  • 原文地址:https://blog.csdn.net/wlh2067/article/details/127951331