【问题标题】:R: mean of all cases with a certain factor levelR:具有一定因子水平的所有案例的平均值
【发布时间】:2020-10-09 13:10:35
【问题描述】:

我从这里Mean by factor by level 尝试代码,但它不起作用。这是我的情况。从航班数据集中,我想知道承运人 UA 的所有飞机的平均航班延误。

library(nycflights13)
data(flights)
mean(flights$air_time[flights$carrier == "UA"])

但结果只是

[1] NA

我做错了什么?

【问题讨论】:

  • 看来你没有做错什么,但如果它包含NA,你就不能取平均值:mean(c(1,2,3,NA))
  • 你为什么要提取air_time?延迟由arr_delaydep_delay 分别表示到达和离开延迟。所以你可以做mean(flights$arr_delay[flights$carrier == "UA"], na.rm = TRUE)mean(flights$dep_delay[flights$carrier == "UA"], na.rm = TRUE)
  • @Ronak Shah 你是对的,谢谢。

标签: r mean na


【解决方案1】:

由于数据集中存在缺失值(NA),您需要在mean 函数中指定参数na.rm = TRUE。否则,如果至少有一个值为NA,则mean 函数(以及其他函数,如summinmax,...)将返回NA

mean(flights$air_time[flights$carrier == "UA"], na.rm = TRUE)
# [1] 211.7914

【讨论】:

    【解决方案2】:

    如果您正在寻找flights$carrier == "UA"mean 时间,您可以使用summarise 尝试dplyr 中的解决方案

    此解决方案将na.rm=TRUE 的缺失值考虑在内

    library(dplyr)
    flights %>% 
      filter(carrier == "UA") %>%
      summarise(., mean(air_time, na.rm=TRUE))
    

    【讨论】:

      【解决方案3】:

      正如 Ric S 所说,使用 na.rm = TRUE 并记住,当 R 找到 NA 值时,函数会将其用作主值,因此使用许多其他类似函数(例如中位数、最大值、最小值)可能会遇到类似问题等。

      【讨论】:

        猜你喜欢
        • 2015-12-22
        • 1970-01-01
        • 2016-12-24
        • 1970-01-01
        • 1970-01-01
        • 2014-10-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多