R语言初步-数据转换-5.summarise()函数

R语言学习笔记总结

R语言初步-用dplyr进行数据转换

install.packages("tidyverse")
install.packages("nycflights13")#仍然记得要先安装
library(nycflights13)#航班信息文件
library(tidyverse)

?flights#查看数据信息的说明书
flights#查看航班信息

4.使用summarize()函数进行分组摘要

计算所有的dep_delay延误时间平均值

summarize(flights,
          delay=mean(dep_delay,na.rm=TRUE)  
          )                                 #计算了dep_delay列的平均值
#运行:
# A tibble: 1 x 1
  delay
  <dbl>
1  12.6

和 group_by() 函数合用可以实现更多功能:

4.1计算每天的平均延误时间

by_day <- group_by(flights,year,month,day)          #按照年月日分组
summarise(by_day,delay=mean(dep_delay,na.rm=TRUE))  #调用按day分的组,计算平均值

#运行:
`summarise()` has grouped output by 'year', 'month'. You can override using the `.groups`
argument.
# A tibble: 365 x 4
# Groups:   year, month [12]
    year month   day delay
   <int> <int> <int> <dbl>
 1  2013     1     1 11.5 
 2  2013     1     2 13.9 
 3  2013     1     3 11.0 
 4  2013     1     4  8.95
 5  2013     1     5  5.73
 6  2013     1     6  7.15
 7  2013     1     7  5.42
 8  2013     1     8  2.55
 9  2013     1     9  2.28
10  2013     1    10  2.84
# ... with 355 more rows

4.2研究目的地距离和平均延误之间的关系

by_dest <- group_by(flights,dest)   #按照目的地分组

 delay1 <- summarise(by_dest,
                    count=n(),     #生成一个计数列
                    dist=mean(distance,na.rm=TRUE),
                    delay=mean(arr_delay,na.rm=TRUE),
                    )              #计算距离均值和延误时间均值
 delay1                             #查看表内容
#运行:

# A tibble: 105 x 4
   dest  count  dist delay
   <chr> <int> <dbl> <dbl>
 1 ABQ     254 1826   4.38
 2 ACK     265  199   4.85
 3 ALB     439  143  14.4 
 4 ANC       8 3370  -2.5 
 5 ATL   17215  757. 11.3 
 6 AUS    2439 1514.  6.02
 7 AVL     275  584.  8.00
 8 BDL     443  116   7.05
 9 BGR     375  378   8.03
10 BHM     297  866. 16.9 
# ... with 95 more rows

#运用以上的表进行
ggplot(data=delay1,
       mapping=aes(x=dist,y=delay))+
  geom_point(aes(size=count),alpha=1/3)+
  geom_smooth(se=FALSE)

#运用散点图和曲线图将数据展现出来生成图片delay1。

delay1.png

接着按自己的设置调整数据,例如:

delay2 <- filter(delay,count>20,dest!="HNL")  #删选出计数大于20而且目的地不是HNL的航班

delay2  #查看数据
#运行:

# A tibble: 96 x 4
   dest  count  dist delay
   <chr> <int> <dbl> <dbl>
 1 ABQ     254 1826   4.38
 2 ACK     265  199   4.85
 3 ALB     439  143  14.4 
 4 ATL   17215  757. 11.3 
 5 AUS    2439 1514.  6.02
 6 AVL     275  584.  8.00
 7 BDL     443  116   7.05
 8 BGR     375  378   8.03
 9 BHM     297  866. 16.9 
10 BNA    6333  758. 11.8 
# ... with 86 more rows

ggplot(data=delay2,
       mapping=aes(x=dist,y=delay))+
  geom_point(aes(size=count),alpha=1/3)+
  geom_smooth(se=FALSE)

#运用散点图和曲线图将数据展现出来生成图片delay2

delay2.png

4.3使用管道组合操作

使用管道操作简化上述代码:
使用 %>% ,可以理解为“然后”,用它可以省去重复的命名过程。

delay3 <- 
  flights %>%
  group_by(dest) %>%
  summarise(
    count=n(),
    dist=mean(distance,na.rm=TRUE),
    delay=mean(arr_delay,na.rm=TRUE)
               ) %>%


filter(count>20,dest!="HNL")
delay3
ggplot(data=delay3,mapping=aes(x=dist,y=delay))+
  geom_point(aes(size=count),alpha=1/3)+
  geom_smooth(se=FALSE)
#生成和delay2相同的delay3

使用 %>% ,x %>% f(y)会变成f(x,y),可以理解为下面的函数指定了一个自变量,下面的命令语句如同一个通路管道,让x自由流淌,嗯哼,舒适了。
注意ggplot2是不支持管道操作的。

4.4关于缺失值和参数na.rm的使用

上述代码中na.rm删去会如何?它有什么作用?

flights %>%
group_by(year,month,day) %>%
summarise(mean(dep_delay)) #na.rm删去

#运行:
# A tibble: 365 x 4
# Groups:   year, month [12]
    year month   day `mean(dep_delay)`
   <int> <int> <int>             <dbl>
 1  2013     1     1                NA
 2  2013     1     2                NA
 3  2013     1     3                NA
 4  2013     1     4                NA
 5  2013     1     5                NA
 6  2013     1     6                NA
 7  2013     1     7                NA
 8  2013     1     8                NA
 9  2013     1     9                NA
10  2013     1    10                NA
# ... with 355 more rows

上述生成的表中有很多缺失值,因为summarise()函数遵循缺失值的一般规则,输入中有缺失值那么输出的也是NA。比如我们使用的数据表中有很多取消的航班,所以mean(dep_delay)的计算结果也成了NA。
在这种情况下,加上na.rm=TRUE语句可以自动去除缺失值。

flights %>%
  group_by(year,month,day) %>%
  summarise(mean(dep_delay,na.rm=TRUE))

#运行:
# A tibble: 365 x 4
# Groups:   year, month [12]
    year month   day `mean(dep_delay, na.rm = TRUE)`
   <int> <int> <int>                           <dbl>
 1  2013     1     1                           11.5 
 2  2013     1     2                           13.9 
 3  2013     1     3                           11.0 
 4  2013     1     4                            8.95
 5  2013     1     5                            5.73
 6  2013     1     6                            7.15
 7  2013     1     7                            5.42
 8  2013     1     8                            2.55
 9  2013     1     9                            2.28
10  2013     1    10                            2.84
# ... with 355 more rows

也可以自己手动用filter()函数删去缺失值:

Not_cancelled <- flights %>%
  filter(!is.na(dep_delay),!is.na(arr_delay))

Not_cancelled %>% 
  group_by(year,month,day) %>%
  summarise(mean=mean(dep_delay))

#运行:
# A tibble: 365 x 4
# Groups:   year, month [12]
    year month   day  mean
   <int> <int> <int> <dbl>
 1  2013     1     1 11.4 
 2  2013     1     2 13.7 
 3  2013     1     3 10.9 
 4  2013     1     4  8.97
 5  2013     1     5  5.73
 6  2013     1     6  7.15
 7  2013     1     7  5.42
 8  2013     1     8  2.56
 9  2013     1     9  2.30
10  2013     1    10  2.84
# ... with 355 more rows

4.5学会使用计数

通过计数功能可以查看自己所得的数据到底是通过多少组数据得来的:
计数:n()
非缺失值计数:sum(!is.na())

举例:运用机尾编号查看平均延误时长最长的飞机:

delays <- Not_cancelled %>%
  group_by(tailnum)%>%
  summarise(delay=mean(arr_delay)
          )

ggplot(data=delays,mapping=aes(x=delay))+
  geom_freqpoly(binwidth=10)

delays.png

可以用散点图,更直观:


delays <- Not_cancelled %>%
  group_by(tailnum)%>%
  summarise(
    delay=mean(arr_delay,na.rm=TRUE),
    n=n()
  )

ggplot(data=delays,mapping=aes(x=n,y=delay))+
  geom_point(alpha=1/10)
#生成散点图,横轴是n,代表个数

平均延误时间散点图.png

在上述图形中,少数数据给图形带来了很明显的特征。有时我们需要去掉观测数量少的分组:

delays <- Not_cancelled %>%
  group_by(tailnum)%>%
  summarise(
    delay=mean(arr_delay,na.rm=TRUE),
    n=n()
  )

delays %>%
  filter(n>25)%>%
ggplot(mapping=aes(x=n,y=delay))+
  geom_point(alpha=1/10)
#生成经过筛选后的散点图
对计数进行筛选后的散点图.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容