我正在通过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知识。 任何人都可以建议我需要做些什么才能澄清差异的来源?
答案 0 :(得分:4)
这是因为将mean
与na.rm = TRUE
一起使用只会考虑那些不是NA
的行。所以长度不等于n()
!
考虑例如在上一个例子中,使用
avg_delay = sum(arr_delay, na.rm = TRUE)/sum(!is.na(arr_delay))
将与上述两种方法完全相同