将数年和日期减去数据框

时间:2015-07-09 20:35:24

标签: r lubridate

我需要减去两年,然后在下面的日期添加一天。使用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)

2 个答案:

答案 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