min и max дают неверный результат в r - PullRequest
0 голосов
/ 30 сентября 2018

Я сделал фрейм данных со столбцами год, месяц, температура, верх и низ

верхняя и нижняя максимальная температура по году, а нижняя минимальная

У меня два вопроса:

Во-первых, почему для некоторых значений в конце информационного кадра верхний и нижний значения вычисляются некорректно, но в остальном они вполне подходят?

И почему я получаю странные оси, когда яЯ использую ggplot, фрейм данных это

, как вы можете видеть, что верхний и нижний значения для 2017 года неверны

     Year   Month  Temp  upper lower        
1    1880   Jan    -.29  -.29   -.09 
2    1880   Feb    -.18  -.29   -.09
3    1880   Mar    -.11  -.29   -.09
       ......
1655 2017   Nov     .84   .96   1.12
1656 2017   Dec     .88   .96   1.12

код:

 newDF <- df %>%
 group_by(Year) %>%
 mutate(upper = max(Temp), # identify max value for month day
       lower = min(Temp) # identify min value for month day
       ) %>% 
 ungroup()

    p <- ggplot(newDF, aes(Month, Temp)) +
    geom_linerange(newDF, mapping=aes(x=Year, ymin=lower, ymax=upper), colour = "wheat2", alpha=.1)
    print(p)

график выглядит нормальноно ось запуталась enter image description here

1 Ответ

0 голосов
/ 30 сентября 2018

Я думаю, что вы очень близки - это просто вторая часть, которая нуждается в настройке.ggplot может работать с полем даты в качестве оси x, но поле Month является текстовым (и не включает год).Здесь я создаю новый столбец с именем date, который объединяет их.lubridate - это удобный пакет для этого, поскольку он выполняет умный анализ форматов даты.

# Fake data
library(dplyr)
df <- data_frame(
  Year = rep(1880:2017, each = 12),
  Month = rep(month.abb, times = (2017-1880+1)),
  Temp = rnorm(n = 1656, mean = 0, sd = 1)
)


newDF = df %>%
  # This line adds a date field based on Year and Month
  mutate(date = lubridate::ymd(paste(Year, Month, 1))) %>%
  group_by(Year) %>%
  mutate(upper = max(Temp), # identify max value for month day
         lower = min(Temp), # identify min value for month day
          ) %>% 
  ungroup()

library(ggplot2)
p <- ggplot(newDF, aes(date, Temp)) +
  geom_linerange(newDF, mapping=aes(x=Year, ymin=lower, ymax=upper), colour = "wheat2", alpha=.1)
print(p)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...