如何减去年数?

时间:2010-07-22 20:08:51

标签: r date date-arithmetic r-faq

我在R中有一个日期,例如:

dt = as.Date('2010/03/17')

我想从这个日期减去2年,而不用担心闰年和这些问题,得到as.Date('2010-03-17')

我该怎么做?

6 个答案:

答案 0 :(得分:64)

使用lubridate

library(lubridate)
ymd("2010/03/17") - years(2)

答案 1 :(得分:47)

最简单的方法是将其转换为POSIXlt并从年份槽中减去2.

> d <- as.POSIXlt(as.Date('2010/03/17'))
> d$year <- d$year-2
> as.Date(d)
[1] "2008-03-17"

请参阅此相关问题:How to subtract days in R?

答案 2 :(得分:24)

您可以使用seq

R> dt = as.Date('2010/03/17')
R> seq(dt, length=2, by="-2 years")[2]
[1] "2008-03-17"

答案 3 :(得分:7)

如果要考虑闰日,我建议使用此润滑功能减去月数,因为其他方法将返回3月1日或NA:

> library(lubridate)
> dt %m-% months(12*2)
[1] "2008-03-17"

# Try with leap day
> leapdt <- as.Date('2016/02/29')
> leapdt %m-% months(12*2)
[1] "2014-02-28"

答案 4 :(得分:3)

与rcs相同的答案,但有可能在矢量上操作(回答MichaelChirico,我不能评论我没有足够的代表):

R> unlist(lapply(c("2015-12-01", "2016-12-01"), 
      function(x) { return(as.character(seq(as.Date(x), length=2, by="-1 years")[2])) }))
 [1] "2014-12-01" "2015-12-01"

答案 5 :(得分:1)

这种方式似乎也可以完成

dt = as.Date("2010/03/17")
dt-365*2
[1] "2008-03-17"

as.Date("2008/02/29")-365*2
## [1] "2006-03-01"