Dies ist absichtlich.
Sie können durch die lubridate documentation lesen.
Insbesondere könnten Sie tun:
EndDate%m-%months(2)
[1] "2016-02-29"
Dies wird die Subtraktion und automatisch rückgängig zu machen, das Datum der ersten ‚echte date‘ im Fall durchzuführen, dass die Subtraktion zu einem Nicht-Echt Datum führt.
Wohlgemerkt, wenn Sie stattdessen vorwärts rollen wollten, müssten Sie ein wenig mehr Arbeit erledigen (soweit ich sagen kann, wünschte ich, es gäbe einen einfachen Operator wie %m-f%
oder eine andere Ableitung des bereits vorhandenen %m-%
). Aber so etwas funktioniert auch:
EndDate%m-%months(2) + if(is.na(EndDate-months(2))) {days(1)} else {0}
"2016-03-01"