使用 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
在 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