2015-07-09 11 views
0

我需要減去兩年,並添加一天如下所示的日期。使用軟件包lubridate,我可以分別從常規年份或閏年中減去日期,但我需要同時執行這兩個操作。抽象的年份和日期到一個數據框

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

這函數是矢量化的我很想知道爲什麼它會返回「NA」,它可能是因爲未來的數據? – SabDeM

+3

「年」功能正在尋找「2014-02-29」,無法找到它。嘗試解決方法'ymd(df $ ServiceDate) - days(731)' –

回答

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 
+0

以下是所需的輸出 – user3357059

+0

我有您第一次請求的輸出,但您的請求並未反映您更新的期望輸出。上述兩個解決方案都可行 –

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 
相關問題