PDF 85 / 520 Grouped Summaries with summarize()
English · PDF 85
Original PDF page 85
中文 · PDF 85

使用 summarize() 进行分组汇总

最后一个关键动词是 summarize()。它将数据框折叠为单行:

summarize(flights, delay = mean(dep_delay, na.rm = TRUE)) #> # A tibble: 1 × 1 #> delay #> #> 1 12.6

(我们很快就会回来解释 na.rm = TRUE 的含义。)

summarize() 本身并不是特别有用,除非我们将其与 group_by() 配合使用。这会将分析的单位从完整数据集更改为单个分组。然后,当你在分组后的数据框上使用 dplyr 动词时,它们会自动“按组”应用。例如,如果我们对按日期分组的数据框应用完全相同的代码,就会得到每个日期的平均延误:

by_day <- group_by(flights, year, month, day) summarize(by_day, delay = mean(dep_delay, na.rm = TRUE)) #> Source: local data frame [365 x 4] #> Groups: year, month [?] #> #> year month day delay #> #> 1 2013 1 1 11.55 #> 2 2013 1 2 13.86 #> 3 2013 1 3 10.99 #> 4 2013 1 4 8.95 #> 5 2013 1 5 5.73 #> 6 2013 1 6 7.15 #> # ... with 359 more rows

group_by() 和 summarize() 一起提供了在使用 dplyr 时最常用的工具之一:分组汇总。但在继续深入之前,我们需要引入一个强大的新概念:管道。

使用管道组合多个操作

假设我们想探索每个目的地的距离与平均延误之间的关系。利用你所掌握的 dplyr 知识,你可能会写出这样的代码:

by_dest <- group_by(flights, dest) delay <- summarize(by_dest, count = n(),