我需要减去两年,然后在下面的日期添加一天。使用rubridate软件包,我可以分别从常规年份或闰年中减去日期,但我需要同时执行这两个操作。
df <- data.frame(
ServiceDate = c('2010-02-28','2016-02-29'), stringsAsFactors = F)
df$ServiceDate <- as.Date(df$ServiceDate, "%Y-%m-%d")
library(lubridate)
df$TwoYearsEarlier <- ymd(df$ServiceDate) - years(2) + days(1)
这是我从上面的代码中得到的
df
ServiceDate TwoYearsEarlier
2010-02-28 2008-02-29
2016-02-29 <NA>
有没有办法同时计算两者的天数?
这是理想的结果:
df
ServiceDate TwoYearsEarlier
2010-02-28 2008-02-29
2016-02-29 2014-03-01
在Excel中我使用类似这样的东西
= DATE(YEAR(AW2)-2,MONTH(AW2),日(AW2)+1)
答案 0 :(得分:3)
使用持续时间dyears
df$TwoYearsEarlier <- ymd(df$ServiceDate) - dyears(2)
df
# ServiceDate TwoYearsEarlier
#1 2010-02-28 2008-02-29
#2 2016-02-29 2014-03-01
或者正如我在评论中所说的,天数:
df$TwoYearsEarlier <- df$ServiceDate - days(730)
df
# ServiceDate TwoYearsEarlier
#1 2010-02-28 2008-02-29
#2 2016-02-29 2014-03-01
答案 1 :(得分:1)
年和月的确不是明确定义的时间间隔,但似乎您希望使用2 * 365天的时间间隔,其中是明确定义的持续时间:
> df$TwoYearsEarlier <- ymd(df$ServiceDate) + days(-2*365)
> df
ServiceDate TwoYearsEarlier
1 2010-02-28 2008-02-29
2 2016-02-29 2014-03-01