2016-06-07 3 views
0

Я хотел бы создать график временных рядов в R, который сравнивает этот год с прошлым годом. Я хотел бы использовать даты этого года в качестве оси x.r - карта даты от нескольких лет до одного года

Какова функция, которая, учитывая набор дат от 2 или более лет, сделает их одинаковыми годами? Пример

данных:

mydata <- data.frame(
    date.col = as.Date(c('2014-05-23', '2014-05-24', '2014-05-25', '2015-05-23', '2015-05-24', '2015-05-25', '2016-05-23', '2016-05-24', '2016-05-25')), 
    value = c(10,23,15,13,26,17,22,30,19)) 

    date.col value 
1 2014-05-23 10 
2 2014-05-24 23 
3 2014-05-25 15 
4 2015-05-23 13 
5 2015-05-24 26 
6 2015-05-25 17 
7 2016-05-23 22 
8 2016-05-24 30 
9 2016-05-25 19 

Ожидаемый результат:

date.col value adj.date 
1 2014-05-23 10 2016-05-23 
2 2014-05-24 23 2016-05-24 
3 2014-05-25 15 2016-05-25 
4 2015-05-23 13 2016-05-23 
5 2015-05-24 26 2016-05-24 
6 2015-05-25 17 2016-05-25 
7 2016-05-23 22 2016-05-23 
8 2016-05-24 30 2016-05-24 
9 2016-05-25 19 2016-05-25 

В идеале, функция может легко поместиться в dplyr цепи:

mydata %>% normalize.dates(date.col, fit.to='2016') %>% ggplot(...) 
+1

'формат (х, «% j») 'превратит все в Юлиана, тогда вы можете построить его и добавить ось x на основе позиционирования Юлиана. Или даже поставить юлианские даты по дну. Високосные годы делают вещи интересными. В противном случае ваше решение должно быть прекрасным. – Badger

ответ

1

Это хорошо работает:

as.Date(format(date.col, '2016-%m-%d')) 

Fit в dplyr цепи:

my.data %>% mutate(adj.date = as.Date(format(date.col, '2016-%m-%d'))) %>% 
    ggplot(aes(x=adj.date)) + ... 

Полезно для участков временных рядов, когда все сроки должны быть нормированы на год в течение сравнения года:

mydata %>% 
    mutate(adj.date = as.Date(format(date.col, '2016-%m-%d'))) %>% 
    ggplot(aes(x=adj.date, y=value, color=as.factor(year(date.col)))) + geom_line() 

enter image description here