Я пытаюсь отбросить год из многолетнего фрейма данных и рассчитать день-месяц по оси x с geom_smooth(), рассчитанный для разных лет.Капля года с POSIXct и графика данных ts с ggplot2
Моя структура данных, изначально выглядит следующим образом:
> str(pmWaw)
'data.frame': 52488 obs. of 5 variables:
$ date : POSIXct, format: "2014-01-01 00:00:00" "2014-01-01 00:00:00" "2014-01-01 00:00:00" "2014-01-01 01:00:00" ...
$ stacja: Factor w/ 273 levels "DsWrocKorzA",..: 26 27 129 26 27 129 26 27 129 26 ...
$ pm25 : num 100 63 NA 69 36 NA 41 31 NA 37 ...
$ pm10 : num 122 68 79 77 38 90 43 32 39 38 ...
$ season: Ord.factor w/ 4 levels "spring (MAM)"<..: 4 4 4 4 4 4 4 4 4 4 ...
Использование lubridate
я добавил месяц и год в виде отдельных переменных:
library(lubridate)
pmWaw$year<- year(pmWaw$date)
pmWaw$month<- month(pmWaw$date)
Далее, используя код найденный здесь на StackOverflow я рассчитал месячная и дневная переменная в %m-%d
формат:
pmWaw$month.day<-format(pmWaw$date, format="%m-%d")
#check new variable type:
> typeof(pmWaw$month.day)
[1] "character"
В конце концов кадр данных Я работаю с такой:
> head(pmWaw)
date stacja pm25 pm10 season year month month.day
1 2014-01-01 00:00:00 MzWarNiepodKom 100 122 winter (DJF) 2014 1 01-01
2 2014-01-01 00:00:00 MzWarszUrsynow 63 68 winter (DJF) 2014 1 01-01
3 2014-01-01 00:00:00 MzWarTarKondra NA 79 winter (DJF) 2014 1 01-01
4 2014-01-01 01:00:00 MzWarNiepodKom 69 77 winter (DJF) 2014 1 01-01
5 2014-01-01 01:00:00 MzWarszUrsynow 36 38 winter (DJF) 2014 1 01-01
6 2014-01-01 01:00:00 MzWarTarKondra NA 90 winter (DJF) 2014 1 01-01
> tail(pmWaw)
date stacja pm25 pm10 season year month month.day
52483 2015-12-30 22:00:00 MzWarAlNiepo 36 47 winter (DJF) 2015 12 12-30
52484 2015-12-30 22:00:00 MzWarKondrat 26 29 winter (DJF) 2015 12 12-30
52485 2015-12-30 22:00:00 MzWarWokalna 36 44 winter (DJF) 2015 12 12-30
52486 2015-12-30 23:00:00 MzWarAlNiepo 39 59 winter (DJF) 2015 12 12-30
52487 2015-12-30 23:00:00 MzWarKondrat 36 39 winter (DJF) 2015 12 12-30
52488 2015-12-30 23:00:00 MzWarWokalna 40 49 winter (DJF) 2015 12 12-30
Передача новых значений ggplot дает мне три вопроса:
ggplot(pmWaw, aes(x=month.day, y=pm25)) +
geom_jitter(alpha=0.5) +
geom_smooth()
Во-первых (незначительные) проблема: month.day является char type variable и ggplot не будут распознавать начальный характер временного ряда. Этого я, вероятно, преодолею, вручную установив метки метки на месяцы.
Вторая (основная) проблема geom_smooth() не рассчитана вообще, и я не могу понять, почему?
Третья (основная) проблема заключается в том, что я не могу найти решение для добавления year
в качестве переменной группировки для двух отдельных сглаженных линий (в основном потому, что geom_smooth вообще не существует).
Я предполагаю, что источник всех проблем лежит где-то в том, как я извлекал формат месяца и дня и получал переменную класса символов.
Может ли кто-нибудь помочь мне исправить это? Любые намеки оценили.