我在 R 中有一个日期,例如:
dt = as.Date('2010/03/17')
我想从这个日期减去 2 年,而不用担心闰年和此类问题,得到as.Date('2010-03-17')
.
我该怎么做?
我在 R 中有一个日期,例如:
dt = as.Date('2010/03/17')
我想从这个日期减去 2 年,而不用担心闰年和此类问题,得到as.Date('2010-03-17')
.
我该怎么做?
和lubridate
library(lubridate)
ymd("2010/03/17") - years(2)
最简单的做法是将其转换为 POSIXlt 并从年份槽中减去 2。
> d <- as.POSIXlt(as.Date('2010/03/17'))
> d$year <- d$year-2
> as.Date(d)
[1] "2008-03-17"
请参阅此相关问题:如何在 R 中减去天数?.
你可以使用seq
:
R> dt = as.Date('2010/03/17')
R> seq(dt, length=2, by="-2 years")[2]
[1] "2008-03-17"
如果要考虑闰日,那么我建议使用此 lubridate 函数减去月份,因为其他方法将返回 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"
与 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"
这种方式似乎也可以完成工作
dt = as.Date("2010/03/17")
dt-365*2
[1] "2008-03-17"
as.Date("2008/02/29")-365*2
## [1] "2006-03-01"