我的 aggregate() 输出和 tidyverse 输出之间的区别

Difference between my aggregate() output and tidyverse output

我正在使用航班数据集。我尝试计算不同机场(起点)的平均到达和离开延迟。 我用聚合函数试了一下:

average_delay <- aggregate(cbind(arr_delay,dep_delay) ~ origin, FUN = mean, data = flights)
print(average_delay, digits = 3)

之后我也用 tidyverse 试了一下:

library(tidyverse)
average_delay_tidy = flights %>%
  group_by(origin) %>% 
  summarise(arr_delay = mean(arr_delay, na.rm = TRUE),
            dep_delay = mean(dep_delay, na.rm = TRUE)) %>%
  mutate_if(is.numeric, round, digits = 3) %>%
  print

但是我得到了不同的输出:

合计:

|origin|arr_delay |dep_delay |
:------|:--------:|:--------:|
|EWR   | 9.56     | **15.0**     |
|JFK   | 5.85     | **12.0**     |
|LGA   | 6.11     | 10.3     |  

Tidyverse:

  <chr>      <dbl>     <dbl>
|origin|arr_delay |dep_delay |
:------|:--------:|:--------:|
|EWR   | 9.56     | **15.1**     |
|JFK   | 5.85     | **12.1**     |
|LGA   | 6.11     | 10.3     | 

德差异很小,但是,我不明白怎么可能? 有人可以向我解释为什么这些输出不同吗? 是因为 NA 值吗?

提前致谢!

差别很小,似乎与四舍五入有关,因为 tibble 为显示做了一些打印格式,但在 aggregate 中,如果有 NA,请指定 na.action 参数,默认情况下是 na.omit 即,如果该行中只有一个 NA 元素,它将完全删除该行。将其更改为 NULL

aggregate(cbind(arr_delay,dep_delay) ~ origin, FUN = mean, 
    na.rm = TRUE,  data = flights,
        na.action = NULL)

-输出

 origin arr_delay dep_delay
1    EWR  9.107055  15.10795
2    JFK  5.551481  12.11216
3    LGA  5.783488  10.34688

确认是否有NA个元素

 colSums(is.na(flights[c('arr_delay', 'dep_delay')]))
arr_delay dep_delay 
     9430      8255