热线电话:13121318867

登录
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
3
关注作者
收藏
评论(0)

发表评论

暂无数据
推荐帖子