r - 如何在 R 中的 ggplot 美学中使用先验中位数?
问题描述
我正在尝试将中位数计算为一个数字,然后将该数字用作 ggplot 美学中的值。
我首先尝试获取中值作为值:
mean_delay_median <- nycflights13::flights %>%
group_by(dest) %>%
summarise(mean_delay = mean(arr_delay, na.rm = TRUE)) %>%
median(mean_delay)
这会产生错误消息:
Error in median.default(., mean_delay) : need numeric data
我怎样才能解决这个问题?
一旦我得到这个工作,我的第二步是根据高于和低于这个中值“mean_delay_median”的值为地图着色,如下所示:
nycflights13::flights %>%
group_by(dest) %>%
summarise(mean_delay = mean(arr_delay, na.rm = TRUE)) %>%
inner_join(nycflights13::airports, c('dest' = 'faa')) %>%
ggplot(aes(lon, lat, color=mean_delay>mean_delay_median)) +
borders("state") +
geom_point() +
coord_quickmap()
一般来说,我寻求在后续代码中使用先前统计数据的指导。
谢谢!
解决方案
你应该注意到一个destination( dest
)arr_delay
丢失了所有的观察。
library(tidyverse)
library(nycflights13)
flights %>%
group_by(dest) %>%
filter(all(is.na(arr_delay))) %>%
select(dest, arr_delay)
#> # A tibble: 1 x 2
#> # Groups: dest [1]
#> dest arr_delay
#> <chr> <dbl>
#> 1 LGA NA
这导致NaN
,而不是零。
mean(c(NA), na.rm = TRUE)
#> [1] NaN
换句话说,您应该在函数中na.rm = TRUE
再次添加。median
flights %>%
group_by(dest) %>%
summarise(mean_delay = mean(arr_delay, na.rm = TRUE)) %>%
mutate(arrival = ifelse(mean_delay > median(mean_delay, na.rm = TRUE), "late", "okay")) %>% # na.rm option to median
inner_join(airports, by = c("dest" = "faa")) %>%
ggplot() +
aes(lon, lat, colour = arrival) +
borders("state") +
geom_point() +
coord_quickmap()
由于 的平均值LGA
没有任何值,它的标签可能变成NA
。
推荐阅读
- math - 沿直线均匀分布n个点
- javascript - 如何通过按 ctrl 键或 shift 键在 html 表格中选择多行?
- reactjs - React Native - 编辑平面列表,但平面列表保持不变
- javascript - 在功能组件中添加窗口事件监听器的正确做法
- mongodb - 如何同时执行 $group 和 $lookup 聚合
- sql - 在sql中强制分区
- .htaccess - 在htaccess中从http重定向到https?
- ios - 在 WKWebView 中播放视频
- flutter - 当打开推送通知设置 WebView 并在通知正文中设置给定链接时,如何在 Flutter 中打开活动?
- node.js - Google adsense API - 获取所有提醒