【问题标题】:Difference between my aggregate() output and tidyverse output我的 aggregate() 输出和 tidyverse 输出之间的区别
【发布时间】:2021-11-15 17:03:04
【问题描述】:

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

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     | 

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

提前致谢!

【问题讨论】:

    标签: r aggregate tidyverse mean


    【解决方案1】:

    差异是如此之小以至于它似乎与四舍五入有关,因为tibble 做了一些打印格式以供显示,但在aggregate 中,如果有 NA,请指定 na.action 参数,默认情况下为 @987654324 @ 即如果行中有单个 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 
    

    【讨论】:

    • 我试过命令,但我到处都是 NA 作为输出。我认为它也与舍入有关,但是如何在我的代码中解决这个问题?或者我可以用什么方式把它写在一个简短的注释中以便澄清?
    • @WouterP 这是因为您没有为mean 添加na.rm = TRUE
    • @WouterP 请检查更新的输出和代码
    猜你喜欢
    • 2020-10-07
    • 1970-01-01
    • 2015-08-27
    • 1970-01-01
    • 1970-01-01
    • 2021-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多