mean()和sum()/ n()结果不匹配

时间:2018-02-14 10:42:51

标签: r

我正在通过R进行数据科学练习来教自己R,当我试图找到相同问题的不同解决方案时,我遇到了困扰我的结果。

我加载了以下软件包:

library(nycflights13)
library(tidyverse)

问题是:查看每天取消的航班数量(flights数据集)。有模式吗?取消航班的比例是否与平均延误相关?

我找到了一个很好地描述模式的解决方案:

flights %>%
 group_by(year, month, day) %>%
 summarize(cancelled = mean(is.na(arr_delay)) , avg_delay = mean(arr_delay, na.rm = TRUE)) %>%
 ggplot(mapping = aes(x = avg_delay, y = cancelled)) +
 geom_point(alpha=0.5) + 
 geom_smooth(se=FALSE)

以下代码(mean()与[{1}}次sum()/n()次广告代码交换)给出完全相同的图片:

cancelled

但是,当我为flights %>% group_by(year, month, day) %>% summarize(cancelled = sum(is.na(arr_delay))/n() , avg_delay = mean(arr_delay, na.rm = TRUE)) %>% ggplot(mapping = aes(x = avg_delay, y = cancelled)) + geom_point(alpha=0.5) + geom_smooth(se=FALSE) 执行相同操作时,图片会发生变化:

avg_delay

我希望所有表达式都能给出相同的结果。我的想法是,有时会考虑缺失的值,有时不会,因此图片会发生变化,但我缺乏测试差异的R知识。 任何人都可以建议我需要做些什么才能澄清差异的来源?

1 个答案:

答案 0 :(得分:4)

这是因为将meanna.rm = TRUE一起使用只会考虑那些不是NA的行。所以长度不等于n()

考虑例如在上一个例子中,使用

avg_delay = sum(arr_delay, na.rm = TRUE)/sum(!is.na(arr_delay))

将与上述两种方法完全相同