Как использовать априорную медиану в эстетике ggplot в R? - PullRequest
0 голосов
/ 08 декабря 2018

Я пытаюсь вычислить медиану как одно число, а затем использую это число в качестве значения в эстетике 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() 

В общем, я ищу руководство по использованию предыдущей статистики в последующем коде.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 08 декабря 2018

Следует отметить, что в одном пункте назначения (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()

enter image description here

Поскольку среднее значение для LGA неимеет любое значение, его метка может стать NA.

0 голосов
/ 08 декабря 2018

вы просто пропустите summarise(median_all_delay = median(mean_delay, na.rm = TRUE))

попробуйте это:

mean_delay_median <- nycflights13::flights %>% 
  group_by(dest) %>%
  summarise(mean_delay = mean(arr_delay, na.rm = TRUE)) %>% 
  summarise(median_all_delay = median(mean_delay, na.rm = TRUE)) %>% 
  unlist()

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() 

вывод:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...