要获取年份差异(浮点数),您可以将日期转换为年份的十进制数,然后计算它们之间的差异。
x <- as.Date(c("2001-01-01", "2003-04-05"))
date2DYear <- function(x) {
as.numeric(format(x,"%Y")) +
(as.numeric(format(x,"%j")) - 0.5) /
as.numeric(format(as.Date(paste0(format(x,"%Y"), "-12-31")),"%j"))
}
diff(date2DYear(x))
我从一年的天数减去0.5,因为不确定你是在一天的开始还是结束,并且%j以1开始。
我认为2012-03-01和2017-03-01之间的差距不需要是5年,因为2012年有366天,2017年有365天,而2012-03-01是一年中的第61天,2017-03-01是第60天。
x <- as.Date(c("2012-03-01", "2017-03-01"))
diff(date2DYear(x))
请注意,使用来自
lubridate
的
time_length
和
interval
在进行累积时间差时不一定会得到相同的结果。
library(lubridate)
x <- as.Date(c("2012-01-01", "2012-03-01", "2012-12-31"))
time_length(interval(x[1], x[3]), "years")
time_length(interval(x[1], x[2]), "years") +
time_length(interval(x[2], x[3]), "years")
diff(date2DYear(x[c(1,3)]))
diff(date2DYear(x[c(1,2)])) + diff(date2DYear(x[c(2,3)]))
x <- as.Date(c("2013-01-01", "2013-03-01", "2013-12-31"))
time_length(interval(x[1], x[3]), "years")
time_length(interval(x[1], x[2]), "years") +
time_length(interval(x[2], x[3]), "years")
diff(date2DYear(x[c(1,3)]))
diff(date2DYear(x[c(1,2)])) + diff(date2DYear(x[c(2,3)]))
POSIXct
对象(例如来自Sys.time()
)。 - Dirk Eddelbuettel