假設(shè)我們想要研究每個(gè)目的地的距離和平均延誤時(shí)間之間的關(guān)系。使用已經(jīng)了解的 dplyr
包功能,你可能會(huì)寫出以下代碼:
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英里內(nèi),平均延誤時(shí)間會(huì)隨著距離的增加而增加,接著會(huì)隨著距離的增加而減少。隨著飛
行距離的增加,延誤時(shí)間有可能會(huì)在飛行中彌補(bǔ)回來嗎?
ggplot(data = delay, mapping = aes(x = dist, y = delay)) +
geom_point(aes(size = count), alpha = 1/3) +
geom_smooth(se = FALSE)
完成數(shù)據(jù)準(zhǔn)備需要 3 步。
(1) 按照目的地對(duì)航班進(jìn)行分組。
(2) 進(jìn)行摘要統(tǒng)計(jì),計(jì)算距離、平均延誤時(shí)間和航班數(shù)量。
(3) 通過篩選除去噪聲點(diǎn)和火奴魯魯機(jī)場(chǎng),因?yàn)榈竭_(dá)該機(jī)場(chǎng)的距離幾乎是到離它最近機(jī)場(chǎng)的
距離的 2 倍。
這段代碼寫起來有點(diǎn)令人泄氣,因?yàn)椴坏貌粚?duì)每個(gè)中間數(shù)據(jù)框命名,盡管我們根本不關(guān)心
這一點(diǎn)。命名是很難的,這樣做會(huì)影響我們的分析速度。
解決這個(gè)問題的另一種方法是使用管道, %>%:
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")
這種方法的重點(diǎn)在于轉(zhuǎn)換的過程,而不是轉(zhuǎn)換的對(duì)象,這使得代碼具有更好的可讀性。你
可以將其讀作一串命令式語(yǔ)句:分組,然后摘要統(tǒng)計(jì),然后進(jìn)行篩選。在閱讀代碼時(shí), %>%
最好讀作“然后”。
使用這種方法時(shí), x %>% f(y) 會(huì)轉(zhuǎn)換為 f(x, y), x %>% f(y) %>% g(z) 會(huì)轉(zhuǎn)換為 g(f(x,
y), z),以此類推。








暫無數(shù)據(jù)