使用 summarize() 进行分组汇总
最后一个关键动词是 summarize()。它将数据框折叠为单行:
summarize(flights, delay = mean(dep_delay, na.rm = TRUE)) #> # A tibble: 1 × 1 #> delay #>
(我们很快就会回来解释 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 #>
group_by() 和 summarize() 一起提供了在使用 dplyr 时最常用的工具之一:分组汇总。但在继续深入之前,我们需要引入一个强大的新概念:管道。
使用管道组合多个操作
假设我们想探索每个目的地的距离与平均延误之间的关系。利用你所掌握的 dplyr 知识,你可能会写出这样的代码:
by_dest <- group_by(flights, dest) delay <- summarize(by_dest, count = n(),