2017-01-01 3 views
2

Распаковка месяца lubridate проста: month(some_date), и это дает 1 2 3 4 5 6 7 8 9 10 11 12 1 2 3 4 5...Extract месяц в течение нескольких лет с lubridate

Но что, если мне нужно, чтобы определить номер месяца в течение нескольких лет, чтобы получить 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...? Есть ли способ достичь этого в lubridate (или с базой R)? Спасибо

Я попробовал этот

Day <- c('2015/01/01', '2015/03/01', '2015/07/25', '2016/03/05', '2016/11/28') 
Day <- date(Day) 
Month <- Day - min(Day) 
Month <- ((Month/ddays(1))/30.41)+1 
Month <- trunc(Month) 

, но, очевидно, дает плохое приближение месяца (1 2 7 15 23 --March первый, 2015 рассматривается как принадлежащий 2 месяца #).

ответ

4

Что вы можете сделать, это вычесть первый год из года даты и умножить на 12 и добавить это к выходу month(Day). Это добавит 0 в течение первого года, 12 на второй год и так далее.

Использование:

month(Day) + (year(Day) - min(year(Day)))*12 

дает:

[1] 1 3 7 15 23 

В базовой R вы можете сделать это следующим образом (как и было предложено @DavidArenburg):

mnths <- as.POSIXlt(Day) 
mnths$mon + 1 + (mnths$year - min(mnths$year)) * 12 
Смежные вопросы