使用lubridate提取数月的月份

时间:2017-01-01 09:14:01

标签: r lubridate

在lubridate中提取月份非常简单:month(some_date),这会给1 2 3 4 5 6 7 8 9 10 11 12 1 2 3 4 5...

但是如果我需要在几年内确定月份数来获得1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...怎么办?有没有办法在lubridate(或使用R base)中达到此目的?谢谢

我试过这个

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 - 2015年3月1日被视为属于第2个月。)

1 个答案:

答案 0 :(得分: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