使用 lubridate 提取数年的月份

Extract month over several years with 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 个月)。

您可以做的是从日期的年份中减去第一年,然后乘以 12,然后将其添加到 month(Day) 的输出中。这将为第一年添加 0,为第二年添加 12,依此类推。

使用:

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

给出:

[1]  1  3  7 15 23

在 base R 中,您可以按如下方式进行(@DavidArenburg 也建议):

mnths <- as.POSIXlt(Day)
mnths$mon + 1 + (mnths$year - min(mnths$year)) * 12