在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个月。)
答案 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