2017-02-04 17 views
0

Я пытаюсь отбросить год из многолетнего фрейма данных и рассчитать день-месяц по оси 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() 

enter image description here

Во-первых (незначительные) проблема: month.day является char type variable и ggplot не будут распознавать начальный характер временного ряда. Этого я, вероятно, преодолею, вручную установив метки метки на месяцы.

Вторая (основная) проблема geom_smooth() не рассчитана вообще, и я не могу понять, почему?

Третья (основная) проблема заключается в том, что я не могу найти решение для добавления year в качестве переменной группировки для двух отдельных сглаженных линий (в основном потому, что geom_smooth вообще не существует).

Я предполагаю, что источник всех проблем лежит где-то в том, как я извлекал формат месяца и дня и получал переменную класса символов.

Может ли кто-нибудь помочь мне исправить это? Любые намеки оценили.

ответ

0

Похоже, я нашел решение для работы с:

ggplot(pmWaw, aes(x=month.day, y=pm25, group = year)) + 
geom_point(alpha=0.5) + 
geom_smooth(aes(color=factor(year))) 

решает вопросы 2 и 3 - геом сглаживать там, и я могу выделить лет. Вероятно, это не лучшее решение, но может быть хорошим местом для начала

enter image description here

 Смежные вопросы

  • Нет связанных вопросов^_^