2018-11-03
阅读量:
877
使用管道组合多种操作
假设我们想要研究每个目的地的距离和平均延误时间之间的关系。使用已经了解的 dplyr
包功能,你可能会写出以下代码:
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)
)
delay <- filter(delay, count > 20, dest != "HNL")
# 750英里内,平均延误时间会随着距离的增加而增加,接着会随着距离的增加而减少。随着飞
行距离的增加,延误时间有可能会在飞行中弥补回来吗?
ggplot(data = delay, mapping = aes(x = dist, y = delay)) +
geom_point(aes(size = count), alpha = 1/3) +
geom_smooth(se = FALSE)
完成数据准备需要 3 步。
(1) 按照目的地对航班进行分组。
(2) 进行摘要统计,计算距离、平均延误时间和航班数量。
(3) 通过筛选除去噪声点和火奴鲁鲁机场,因为到达该机场的距离几乎是到离它最近机场的
距离的 2 倍。
这段代码写起来有点令人泄气,因为不得不对每个中间数据框命名,尽管我们根本不关心
这一点。命名是很难的,这样做会影响我们的分析速度。
解决这个问题的另一种方法是使用管道, %>%:
delays <- flights %>%
group_by(dest) %>%
summarize(
count = n(),
dist = mean(distance, na.rm = TRUE),
delay = mean(arr_delay, na.rm = TRUE)
) %>%
filter(count > 20, dest != "HNL")
这种方法的重点在于转换的过程,而不是转换的对象,这使得代码具有更好的可读性。你
可以将其读作一串命令式语句:分组,然后摘要统计,然后进行筛选。在阅读代码时, %>%
最好读作“然后”。
使用这种方法时, x %>% f(y) 会转换为 f(x, y), x %>% f(y) %>% g(z) 会转换为 g(f(x,
y), z),以此类推。
0.0000
0
3
关注作者
收藏
评论(0)
发表评论
暂无数据
推荐帖子
0条评论
0条评论
1条评论