【发布时间】:2016-04-10 09:16:19
【问题描述】:
由于我需要以十进制格式合理准确地表示年份(~4-5 位 的精度可以),所以我转向了 lubridate 包。这是我尝试过的:
refDate <- as.Date("2016-01-10")
endDate <- as.Date("2020-12-31")
daysInLeapYear <- 366
daysInRegYear <- 365
leapYearFractStart <- 0
leapYearRegStart <- 0
daysInterval <- as.interval(difftime(endDate, refDate, unit = "d"), start = refDate)
periodObject <- as.period(daysInterval)
if(leap_year(refDate)) {
leapYearFractStart <- (as.numeric(days_in_month(refDate))-as.numeric(format(refDate, "%d")))/daysInLeapYear
}
if(!leap_year(refDate)) {
leapYearRegStart <- (as.numeric(days_in_month(refDate))-as.numeric(format(refDate, "%d")))/daysInRegYear
}
returnData <- periodObject@year+(periodObject@month/12)+leapYearFractStart+leapYearRegStart
可以安全地假设结束日期总是在月底,因此最后没有闰年检查。依靠 lubridate 进行正确的年/月计数,我仅针对开始日期调整闰年。
我发现这让我的准确度只有 3 位数!另外,它看起来有点粗糙。
是否有更完整、更准确的程序来确定区间内年份的十进制表示?
【问题讨论】: