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
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容