gt6*_*89b 41 r date date-arithmetic r-faq
我在R有一个日期,例如:
dt = as.Date('2010/03/17')
Run Code Online (Sandbox Code Playgroud)
我想从这个日期减去2年,而不用担心闰年和这样的问题as.Date('2010-03-17').
我该怎么办?
had*_*ley 66
同 lubridate
library(lubridate)
ymd("2010/03/17") - years(2)
Run Code Online (Sandbox Code Playgroud)
Sha*_*ane 47
最简单的方法是将其转换为POSIXlt并从年份槽中减去2.
> d <- as.POSIXlt(as.Date('2010/03/17'))
> d$year <- d$year-2
> as.Date(d)
[1] "2008-03-17"
Run Code Online (Sandbox Code Playgroud)
看到这个相关问题:如何减去R中的天数?.
rcs*_*rcs 24
你可以使用seq:
R> dt = as.Date('2010/03/17')
R> seq(dt, length=2, by="-2 years")[2]
[1] "2008-03-17"
Run Code Online (Sandbox Code Playgroud)
小智 7
如果要考虑闰日,那么我建议使用这个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"
Run Code Online (Sandbox Code Playgroud)