2016-05-25 64 views
2

下列R-行爲使我迷惑不解:個月()運算lubridate產生NA

> EndDate<-as.Date("2016-03-31") 
> EndDate-months(2) 
[1] "2016-01-31" 

> EndDate<-as.Date("2016-04-30") 
> EndDate-months(2) 
[1] NA 

爲什麼第一工作和第二次呢?

回答

1

這是故意的。

您可以通過lubridate documentation閱讀。

具體來說,你可以這樣做:

EndDate%m-%months(2) 
[1] "2016-02-29" 

這將執行減法和自動回滾日期在減法導致非真正的約會事件中第一個「真正的約會」。如果你想要向前滾動,則需要做更多的工作(據我所知,我希望有一個簡單的運算符,如%m-f%或其他一些推導已存在的函數%m-%)。但是像這樣的東西會起作用:

EndDate%m-%months(2) + if(is.na(EndDate-months(2))) {days(1)} else {0} 
"2016-03-01"