dplyr简介
作者: Hadley Wickham
是plyr包的后续版本
安装包 1 2 install.packages("dplyr" ) install.packages("nycflights13" )
1 2 library (nycflights13)library (dplyr)
dplyr主要功能
filter() (and slice())
arrange()
select() (and rename())
distinct()
mutate() (and transmute())
summarise()
sample_n() and sample_frac()
数据集了解 使用 nycflights13
包中的 flights
数据集. ?flights
查看数据集情况和变量意义
查看数据集
1 2 3 4 5 6 7 8 9 10 11 12 ## Source: local data frame [6 x 16 ] ## ## year month day dep_time dep_delay arr_time arr_delay carrier tailnum ## (int) (int) (int) (int) (dbl) (int) (dbl) (chr) (chr) ## 1 2013 1 1 517 2 830 11 UA N14228 ## 2 2013 1 1 533 4 850 20 UA N24211 ## 3 2013 1 1 542 2 923 33 AA N619AA ## 4 2013 1 1 544 -1 1004 -18 B6 N804JB ## 5 2013 1 1 554 -6 812 -25 DL N668DN ## 6 2013 1 1 554 -4 740 12 UA N39463 ## Variables not shown: flight (int), origin (chr), dest (chr), air_time ## (dbl), distance (dbl), hour (dbl), minute (dbl)
Filter rows with filter() filter() 用来筛选数据框中的行.
问题: 如何筛选所有在3月13号出发的飞机?
Use filter to select all flights on March 13st 1 filter(flights, month == 3 , day == 13 )
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ## Source: local data frame [974 x 16 ] ## ## year month day dep_time dep_delay arr_time arr_delay carrier tailnum ## (int) (int) (int) (int) (dbl) (int) (dbl) (chr) (chr) ## 1 2013 3 13 103 68 457 77 B6 N640JB ## 2 2013 3 13 458 -2 648 0 US N107US ## 3 2013 3 13 515 0 805 -5 UA N76153 ## 4 2013 3 13 525 -5 821 -6 UA N17233 ## 5 2013 3 13 541 -4 920 -3 B6 N729JB ## 6 2013 3 13 545 5 850 0 AA N5EFAA ## 7 2013 3 13 550 -10 648 -45 UA N477UA ## 8 2013 3 13 553 -7 709 -36 AA N3HKAA ## 9 2013 3 13 553 -7 845 -25 AA N3JEAA ## 10 2013 3 13 553 -7 714 -9 B6 N239JB ## .. ... ... ... ... ... ... ... ... ... ## Variables not shown: flight (int), origin (chr), dest (chr), air_time ## (dbl), distance (dbl), hour (dbl), minute (dbl)
filter 和普通筛选的区别 以下几个筛选等价
1 2 3 filter(flights, month == 3 , day == 13 ) flights[flights$month == 3 & flights$day == 13 , ] subset(flights, month == 3 & day == 13 )
使用组合条件筛选行
filter() 与 subset() 类似
对于并列条件, filter可以使用逗号分隔, subset需要使用 & 符号
也可以使用”或”
1 filter(flights, month == 1 | month == 2 )
练习
2013年3月中旬, 延迟起飞的班次有多少?
全年哪个月份的班次延迟到达的比例最高?(table函数)
使用行号筛选行
1 2 3 4 5 6 7 8 9 10 11 ## Source: local data frame [5 x 16 ] ## ## year month day dep_time dep_delay arr_time arr_delay carrier tailnum ## (int) (int) (int) (int) (dbl) (int) (dbl) (chr) (chr) ## 1 2013 1 1 517 2 830 11 UA N14228 ## 2 2013 1 1 533 4 850 20 UA N24211 ## 3 2013 1 1 542 2 923 33 AA N619AA ## 4 2013 1 1 544 -1 1004 -18 B6 N804JB ## 5 2013 1 1 554 -6 812 -25 DL N668DN ## Variables not shown: flight (int), origin (chr), dest (chr), air_time ## (dbl), distance (dbl), hour (dbl), minute (dbl)
Arrange rows with arrange()
arrange() 函数用来对行排序
第一个参数是数据框
后面的参数是列名, 从前到后按照次序排序
默认升序, 如果要降序则使用desc()
按照年月日依次排序 1 arrange(flights, month, desc(day), dep_delay)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ## Source: local data frame [336 ,776 x 16 ] ## ## year month day dep_time dep_delay arr_time arr_delay carrier tailnum ## (int) (int) (int) (int) (dbl) (int) (dbl) (chr) (chr) ## 1 2013 1 31 821 -13 1041 2 EV N13978 ## 2 2013 1 31 1233 -12 1320 -30 AA N3JRAA ## 3 2013 1 31 1918 -12 2157 6 9 E N8924B ## 4 2013 1 31 549 -11 641 -28 B6 N239JB ## 5 2013 1 31 955 -11 1107 -14 EV N836AS ## 6 2013 1 31 600 -10 911 1 AA N5DMAA ## 7 2013 1 31 1119 -10 1421 2 B6 N712JB ## 8 2013 1 31 1135 -10 1257 -24 FL N989AT ## 9 2013 1 31 1540 -10 1812 -14 9 E N908XJ ## 10 2013 1 31 651 -9 839 -11 AA N4XBAA ## .. ... ... ... ... ... ... ... ... ... ## Variables not shown: flight (int), origin (chr), dest (chr), air_time ## (dbl), distance (dbl), hour (dbl), minute (dbl)
arrange的等价命令
dplyr::arrange() 与 plyr::arrange() 相似.
与order函数类似, 不过运用更简便.
以下情况等价
1 2 3 4 arrange(flights, year, month, day) flights[order(flights$year, flights$month, flights$day), ] arrange(flights, desc(arr_delay)) flights[order(desc(flights$arr_delay)), ]
Select columns with select()
目的: 大数据集的列太多, 并非全都用到
select函数用来选择列, 缩小数据量
对行不能筛选
选择年月日三列 1 select(flights, year, month, day)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ## Source: local data frame [336 ,776 x 3 ] ## ## year month day ## (int) (int) (int) ## 1 2013 1 1 ## 2 2013 1 1 ## 3 2013 1 1 ## 4 2013 1 1 ## 5 2013 1 1 ## 6 2013 1 1 ## 7 2013 1 1 ## 8 2013 1 1 ## 9 2013 1 1 ## 10 2013 1 1 ## .. ... ... ...
选择相邻列 1 select(flights, day:dep_delay)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ## Source: local data frame [336 ,776 x 3 ] ## ## day dep_time dep_delay ## (int) (int) (dbl) ## 1 1 517 2 ## 2 1 533 4 ## 3 1 542 2 ## 4 1 544 -1 ## 5 1 554 -6 ## 6 1 554 -4 ## 7 1 555 -5 ## 8 1 557 -3 ## 9 1 557 -3 ## 10 1 558 -2 ## .. ... ... ...
删除某些列 1 select(flights, -(year:day))
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ## Source: local data frame [336 ,776 x 13 ] ## ## dep_time dep_delay arr_time arr_delay carrier tailnum flight origin ## (int) (dbl) (int) (dbl) (chr) (chr) (int) (chr) ## 1 517 2 830 11 UA N14228 1545 EWR ## 2 533 4 850 20 UA N24211 1714 LGA ## 3 542 2 923 33 AA N619AA 1141 JFK ## 4 544 -1 1004 -18 B6 N804JB 725 JFK ## 5 554 -6 812 -25 DL N668DN 461 LGA ## 6 554 -4 740 12 UA N39463 1696 EWR ## 7 555 -5 913 19 B6 N516JB 507 EWR ## 8 557 -3 709 -14 EV N829AS 5708 LGA ## 9 557 -3 838 -8 B6 N593JB 79 JFK ## 10 558 -2 753 8 AA N3ALAA 301 LGA ## .. ... ... ... ... ... ... ... ... ## Variables not shown: dest (chr), air_time (dbl), distance (dbl), hour ## (dbl), minute (dbl)
select的周边函数
select函数的功能也包含在base::subset()中, 用subset可以实现, 但不直接
select函数中, 选择列的时候可以使用很多其他函数来辅助, 比如
starts_with()
ends_with()
matches()
contains()
See ?select for more details.
练习
选择所有列名以”time”为结尾的列
选择所有列名中包含”rr”的列
选择所有列名长度不超过5个字符的列
使用select更改列名 You can rename variables with select() by using named arguments:
1 select(flights, tail_num = tailnum)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ## Source: local data frame [336,776 x 1] ## ## tail_num ## (chr) ## 1 N14228 ## 2 N24211 ## 3 N619AA ## 4 N804JB ## 5 N668DN ## 6 N39463 ## 7 N516JB ## 8 N829AS ## 9 N593JB ## 10 N3ALAA ## .. ...
使用rename更改列名 使用select更改列名会只保存那些没更改的列, 因此一般不使用这个方法
1 rename(flights, tail_num = tailnum)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ## Source: local data frame [336 ,776 x 16 ] ## ## year month day dep_time dep_delay arr_time arr_delay carrier ## (int) (int) (int) (int) (dbl) (int) (dbl) (chr) ## 1 2013 1 1 517 2 830 11 UA ## 2 2013 1 1 533 4 850 20 UA ## 3 2013 1 1 542 2 923 33 AA ## 4 2013 1 1 544 -1 1004 -18 B6 ## 5 2013 1 1 554 -6 812 -25 DL ## 6 2013 1 1 554 -4 740 12 UA ## 7 2013 1 1 555 -5 913 19 B6 ## 8 2013 1 1 557 -3 709 -14 EV ## 9 2013 1 1 557 -3 838 -8 B6 ## 10 2013 1 1 558 -2 753 8 AA ## .. ... ... ... ... ... ... ... ... ## Variables not shown: tail_num (chr), flight (int), origin (chr), dest ## (chr), air_time (dbl), distance (dbl), hour (dbl), minute (dbl)
联合使用select和distinct函数, 来选择某一列(某几列)的唯一值(类似unique)
1 distinct(select(flights, tailnum))
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ## Source: local data frame [4,044 x 1] ## ## tailnum ## (chr) ## 1 N14228 ## 2 N24211 ## 3 N619AA ## 4 N804JB ## 5 N668DN ## 6 N39463 ## 7 N516JB ## 8 N829AS ## 9 N593JB ## 10 N3ALAA ## .. ...
distinct多列 1 distinct(select(flights, month, day))
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ## Source: local data frame [365 x 2 ] ## ## month day ## (int) (int) ## 1 1 1 ## 2 1 2 ## 3 1 3 ## 4 1 4 ## 5 1 5 ## 6 1 6 ## 7 1 7 ## 8 1 8 ## 9 1 9 ## 10 1 10 ## .. ... ...
Add new columns with mutate() 在数据框中生成新的列, 使用mutate()
1 2 3 mutate(flights, gain = arr_delay - dep_delay, speed = distance / air_time * 60 )
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ## Source: local data frame [336 ,776 x 18 ] ## ## year month day dep_time dep_delay arr_time arr_delay carrier tailnum ## (int) (int) (int) (int) (dbl) (int) (dbl) (chr) (chr) ## 1 2013 1 1 517 2 830 11 UA N14228 ## 2 2013 1 1 533 4 850 20 UA N24211 ## 3 2013 1 1 542 2 923 33 AA N619AA ## 4 2013 1 1 544 -1 1004 -18 B6 N804JB ## 5 2013 1 1 554 -6 812 -25 DL N668DN ## 6 2013 1 1 554 -4 740 12 UA N39463 ## 7 2013 1 1 555 -5 913 19 B6 N516JB ## 8 2013 1 1 557 -3 709 -14 EV N829AS ## 9 2013 1 1 557 -3 838 -8 B6 N593JB ## 10 2013 1 1 558 -2 753 8 AA N3ALAA ## .. ... ... ... ... ... ... ... ... ... ## Variables not shown: flight (int), origin (chr), dest (chr), air_time ## (dbl), distance (dbl), hour (dbl), minute (dbl), gain (dbl), speed (dbl)
dplyr::mutate() 与 plyr::mutate() 和 base::transform() 类似.
mutate() 和 transform() 的主要区别是mutate能引用刚刚创建的列
1 2 3 4 mutate(flights, gain = arr_delay - dep_delay, gain_per_hour = gain / (air_time / 60 ) )
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ## Source: local data frame [336 ,776 x 18 ] ## ## year month day dep_time dep_delay arr_time arr_delay carrier tailnum ## (int) (int) (int) (int) (dbl) (int) (dbl) (chr) (chr) ## 1 2013 1 1 517 2 830 11 UA N14228 ## 2 2013 1 1 533 4 850 20 UA N24211 ## 3 2013 1 1 542 2 923 33 AA N619AA ## 4 2013 1 1 544 -1 1004 -18 B6 N804JB ## 5 2013 1 1 554 -6 812 -25 DL N668DN ## 6 2013 1 1 554 -4 740 12 UA N39463 ## 7 2013 1 1 555 -5 913 19 B6 N516JB ## 8 2013 1 1 557 -3 709 -14 EV N829AS ## 9 2013 1 1 557 -3 838 -8 B6 N593JB ## 10 2013 1 1 558 -2 753 8 AA N3ALAA ## .. ... ... ... ... ... ... ... ... ... ## Variables not shown: flight (int), origin (chr), dest (chr), air_time ## (dbl), distance (dbl), hour (dbl), minute (dbl), gain (dbl), ## gain_per_hour (dbl)
1 2 3 4 transform(flights, gain = arr_delay - dep_delay, gain_per_hour = gain / (air_time / 60 ) )
会出现error
Summarise values with summarise()
与plyr::summarise())功能相同
将一个数据框退化为一行
1 2 summarise(flights, delay = mean(dep_delay, na.rm = TRUE ))
1 2 3 4 5 ## Source: local data frame [1 x 1] ## ## delay ## (dbl) ## 1 12.63907
随机选择行 随机抽样
sample_n() 抽固定个数
sample_frac() 抽固定比例
可以使用replace = TRUE参数
base::sample 不能应用于数据框
sample_n()
1 2 3 4 5 6 7 8 9 10 11 ## Source: local data frame [5 x 16 ] ## ## year month day dep_time dep_delay arr_time arr_delay carrier tailnum ## (int) (int) (int) (int) (dbl) (int) (dbl) (chr) (chr) ## 1 2013 3 25 NA NA NA NA EV N11565 ## 2 2013 7 16 833 48 946 31 UA N14704 ## 3 2013 12 5 1923 138 2120 131 US N197UW ## 4 2013 10 22 2001 0 2246 -2 B6 N523JB ## 5 2013 10 19 650 -10 804 -29 UA N848UA ## Variables not shown: flight (int), origin (chr), dest (chr), air_time ## (dbl), distance (dbl), hour (dbl), minute (dbl)
sample_frac() 1 sample_frac(flights, 0.01 )
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ## Source: local data frame [3 ,368 x 16 ] ## ## year month day dep_time dep_delay arr_time arr_delay carrier tailnum ## (int) (int) (int) (int) (dbl) (int) (dbl) (chr) (chr) ## 1 2013 11 15 821 -9 936 -8 9 E N602LR ## 2 2013 9 17 1621 -6 1743 -11 EV N14905 ## 3 2013 8 21 2144 -6 2245 -26 EV N22971 ## 4 2013 3 23 923 3 1251 6 AA N4XVAA ## 5 2013 2 25 852 -8 1215 -1 UA N415UA ## 6 2013 8 11 758 -2 951 -28 9 E N600LR ## 7 2013 10 1 1021 -9 1318 -22 VX N636VA ## 8 2013 8 20 2358 -1 322 -18 B6 N662JB ## 9 2013 10 21 1350 -10 1445 -22 US N954UW ## 10 2013 4 24 1606 -4 1754 -6 AA N4XDAA ## .. ... ... ... ... ... ... ... ... ... ## Variables not shown: flight (int), origin (chr), dest (chr), air_time ## (dbl), distance (dbl), hour (dbl), minute (dbl)
dplyr进阶 以上命令的共同点 以上介绍的dplyr中的语法和函数有以下共同点:
第一个参数永远是数据框的名字
接下来的参数是告诉R你想做什么事情, 无需$符号来引用, 语言直白
结论是一个新的数据框
联合使用 以上操作联合使用, 可以进行比较复杂的数据框操作:
对行排序: arrange
选择一些行和列: filter, select
给数据框新添一些变量: mutate
对某些变量进行总结: summarise
对数据框进行按行分组以后, 再对某些变量总结会更好
Grouped operations 对数据框进行按行分组的方法: group_by(). 经过分组以后:
select 与无分组时一样
arrange 优先按照分组变量来排序, 然后才对参数中的变量排序
mutate 和 filter 与一些 window function 一起操作(min), 最强大
vignette(“window-functions”) 查看 window function
sample_n() 和 sample_frac() 分组后在每组内分别抽样
slice 也在组内抽取行
summarise 最好用
去除分组: ungroup()
使用分组进行变量统计 考虑以下问题的计算:
每架飞机在2013年的飞行次数(飞机尾号变量tailnum)
每架飞机在2013年的平均飞行距离(distance)
每架飞机在2013年的平均延迟到达时间(arr_delay)
使用 group_by 进行统计 1 2 3 4 5 6 by_tailnum <- group_by(flights, tailnum) delay <- summarise(by_tailnum, count = n(), dist = mean(distance, na.rm = TRUE ), delay = mean(arr_delay, na.rm = TRUE )) delay <- filter(delay, count > 20 , dist < 2000 )
使用 ggplot2 可视化 1 2 3 4 5 library (ggplot2)ggplot(delay, aes(dist, delay)) + geom_point(aes(size = count), alpha = 1 /2 ) + geom_smooth() + scale_size_area()
1 ## geom_smooth: method ="auto" and size of largest group is >=1000 , so using gam with formula: y ~ s(x, bs = "cs" ). Use 'method = x' to change the smoothing method .
summarise和其他函数结合使用 与summarise结合的函数的特点: 参数为向量, 结果返回单个数:
min(), max(), mean(), sum(), sd(), median(), and IQR()
dplyr包提供的类似函数有:
n(): 本组中的观测数量(计数)
n_distinct(x): x中的 unique values 的数量
first(x), last(x) and nth(x, n) 类似 x[1], x[length(x)] 和 x[n]
计算每个目的地接待的飞机数量和降落次数
目的地: dest
飞机数量: tailnum
降落次数: 使用n()
计算每个目的地接待的飞机数量和降落次数 1 2 3 4 5 destinations <- group_by(flights, dest) summarise(destinations, planes = n_distinct(tailnum), flights = n() )
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ## Source: local data frame [105 x 3 ] ## ## dest planes flights ## (chr) (int) (int) ## 1 ABQ 108 254 ## 2 ACK 58 265 ## 3 ALB 172 439 ## 4 ANC 6 8 ## 5 ATL 1180 17215 ## 6 AUS 993 2439 ## 7 AVL 159 275 ## 8 BDL 186 443 ## 9 BGR 46 375 ## 10 BHM 45 297 ## .. ... ... ...
使用 group_by 进行多层级分组 按天统计航班数量
1 2 daily <- group_by(flights, year, month, day) (per_day <- summarise(daily, flights = n()))
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ## Source: local data frame [365 x 4 ] ## Groups: year, month [?] ## ## year month day flights ## (int) (int) (int) (int) ## 1 2013 1 1 842 ## 2 2013 1 2 943 ## 3 2013 1 3 914 ## 4 2013 1 4 915 ## 5 2013 1 5 720 ## 6 2013 1 6 832 ## 7 2013 1 7 933 ## 8 2013 1 8 899 ## 9 2013 1 9 902 ## 10 2013 1 10 932 ## .. ... ... ... ...
按月统计航班数量 1 (per_month <- summarise(per_day, flights = sum(flights)))
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ## Source: local data frame [12 x 3 ] ## Groups: year [?] ## ## year month flights ## (int) (int) (int) ## 1 2013 1 27004 ## 2 2013 2 24951 ## 3 2013 3 28834 ## 4 2013 4 28330 ## 5 2013 5 28796 ## 6 2013 6 28243 ## 7 2013 7 29425 ## 8 2013 8 29327 ## 9 2013 9 27574 ## 10 2013 10 28889 ## 11 2013 11 27268 ## 12 2013 12 28135
按年统计航班数量 1 (per_year <- summarise(per_month, flights = sum(flights)))
1 2 3 4 5 ## Source: local data frame [1 x 2 ] ## ## year flights ## (int) (int) ## 1 2013 336776
管道操作 dplyr 基本语法的弊病 如果要对数据做很多操作, 则代码只能一步产生一个新数据框.
1 2 3 4 5 6 a1 <- group_by(flights, year, month, day) a2 <- select(a1, arr_delay, dep_delay) a3 <- summarise(a2, arr = mean(arr_delay, na.rm = TRUE ), dep = mean(dep_delay, na.rm = TRUE )) a4 <- filter(a3, arr > 30 | dep > 30 )
嵌套式写法 如果不想出现中间结果, 则需要使用嵌套写法
1 2 3 4 5 6 7 8 9 10 11 filter( summarise( select( group_by(flights, year, month, day), arr_delay, dep_delay ), arr = mean(arr_delay, na.rm = TRUE ), dep = mean(dep_delay, na.rm = TRUE ) ), arr > 30 | dep > 30 )
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ## Source: local data frame [49 x 5 ] ## Groups: year, month [11 ] ## ## year month day arr dep ## (int) (int) (int) (dbl) (dbl) ## 1 2013 1 16 34.24736 24.61287 ## 2 2013 1 31 32.60285 28.65836 ## 3 2013 2 11 36.29009 39.07360 ## 4 2013 2 27 31.25249 37.76327 ## 5 2013 3 8 85.86216 83.53692 ## 6 2013 3 18 41.29189 30.11796 ## 7 2013 4 10 38.41231 33.02368 ## 8 2013 4 12 36.04814 34.83843 ## 9 2013 4 18 36.02848 34.91536 ## 10 2013 4 19 47.91170 46.12783 ## .. ... ... ... ... ...
管道操作: Pipe operator
嵌套操作难以读懂(从内往外读)
dplyr提供了 %>% 操作符, x %>% f(y) 即 f(x, y)
1 2 3 4 5 6 7 8 flights %>% group_by(year, month, day) %>% select(arr_delay, dep_delay) %>% summarise( arr = mean(arr_delay, na.rm = TRUE ), dep = mean(dep_delay, na.rm = TRUE ) ) %>% filter(arr > 30 | dep > 30 )
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ## Source: local data frame [49 x 5 ] ## Groups: year, month [11 ] ## ## year month day arr dep ## (int) (int) (int) (dbl) (dbl) ## 1 2013 1 16 34.24736 24.61287 ## 2 2013 1 31 32.60285 28.65836 ## 3 2013 2 11 36.29009 39.07360 ## 4 2013 2 27 31.25249 37.76327 ## 5 2013 3 8 85.86216 83.53692 ## 6 2013 3 18 41.29189 30.11796 ## 7 2013 4 10 38.41231 33.02368 ## 8 2013 4 12 36.04814 34.83843 ## 9 2013 4 18 36.02848 34.91536 ## 10 2013 4 19 47.91170 46.12783 ## .. ... ... ... ... ...
练习
求平均飞行时间最长的三条航线
2013年上半年, 飞行距离1000以上及以下的航班平均延误时间各为多少?
练习题答案 2013年3月中旬, 延迟起飞的班次有多少? 1 2 nrow(filter(flights, month == 3 , day > 10 , day < 21 , dep_delay > 0 ))
全年哪个月份的班次延迟到达的比例最高? 1 2 3 4 month_flights <- table(flights$month) month_delay <- table((filter(flights, arr_delay > 0 ))$month) which.max(month_delay / month_flights)
列名选择问题答案
选择所有列名以”time”为结尾的列
选择所有列名中包含”rr”的列
选择所有列名长度不超过5个字符的列
1 2 3 select(flights, ends_with("time" )) select(flights, contains("rr" )) flights[,nchar(colnames(flights)) < 6 ]
求平均飞行时间最长的三条航线 1 2 3 4 5 6 7 flights %>% group_by(origin, dest) %>% select(air_time, origin, dest) %>% summarise(air_mean = mean(air_time, na.rm = T )) %>% ungroup() %>% arrange(desc(air_mean)) %>% slice(1 :3 )
1 2 3 4 5 6 7 ## Source: local data frame [3 x 3 ] ## ## origin dest air_mean ## (chr) (chr) (dbl) ## 1 JFK HNL 623.0877 ## 2 EWR HNL 612.0752 ## 3 EWR ANC 413.1250
飞行距离1000以上及以下的航班平均延迟到达时间 2013年上半年, 飞行距离1000以上及以下的航班平均延迟到达时间各为多少?
1 2 3 4 5 6 flights %>% filter(month < 7 ) %>% mutate(above1000 = distance > 1000 ) %>% select(above1000, arr_delay) %>% group_by(above1000) %>% summarise(mean(arr_delay, na.rm = T ))
1 2 3 4 5 6 ## Source: local data frame [2 x 2 ] ## ## above1000 mean(arr_delay, na.rm = T) ## (lgl) (dbl) ## 1 FALSE 10.944168 ## 2 TRUE 4.618789