我正在通过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()
用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
,图片将发生变化:
flights %>%
group_by(year, month, day) %>%
summarize(cancelled = sum(is.na(arr_delay))/n() , avg_delay = sum(arr_delay, na.rm = TRUE)/n()) %>%
ggplot(mapping = aes(x = avg_delay, y = cancelled)) +
geom_point(alpha=0.5) +
geom_smooth(se=FALSE)
我希望所有表达式都能给出相同的结果。我的想法是有时会考虑缺失值,有时不会考虑缺失值,因此画面会发生变化,但是我缺乏R知识来测试差异。谁能建议我需要做些什么,以弄清差异的来源?
这是因为使用mean
withna.rm = TRUE
将仅考虑那些not的行NA
。因此长度将不等于n()
!
考虑例如在您的最后一个示例中,使用
avg_delay = sum(arr_delay, na.rm = TRUE)/sum(!is.na(arr_delay))
将产生与上述两种方法完全相同的结果
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句