R: ajouter 1 mois à une date

je veux obtenir la séquence de date entre un startDate et endDate en ajoutant 1 mois au startDate . ie, si startDate est 2013-01-31 et endDate est 2013-07-31, je préférerais voir des dates comme ceci:

"2013-01-31" "2013-02-28" "2013-03-31" "2013-04-30" "2013-05-31" "2013-06-30" "2013-07-31"

j'ai essayé seq.Date(as.Date("2013-01-31"),by="month",length.out=7) . Mais la sortie de ce code est comme ceci

> seq.Date(as.Date("2013-01-31"),by="month",length.out=7)
[1] "2013-01-31" "2013-03-03" "2013-03-31" "2013-05-01" "2013-05-31" "2013-07-01" "2013-07-31"

alors, quelle est la solution la plus simple pour obtenir la bonne sortie?

9
demandé sur Dinoop Nair 2013-07-16 19:50:07

2 réponses

je dois travailler avec les dates dans R, et l'un des paquets les plus utiles que j'ai trouvé pour les données de date est lubridate . Pour votre problème, vous pouvez simplement faire ce qui suit:

require(lubridate)
# ymd function parses dates in year-month-day format
startDate <- ymd('2013-01-31')
# The %m+% adds months to dates without exceeding the last day
myDates <- startDate %m+% months(c(0:6))

lubridate a également de nombreuses autres fonctions pour les dates, et je recommande fortement de jeter un oeil.

17
répondu ialm 2013-07-16 16:19:24

cela ne fonctionne pas, parce que R n'est pas sûr que faire avec le dernier jour du mois :) donc j'ai la solution simple. Faites la même chose mais utilisez le 1er jour du mois suivant et puis soustrayez 1:

    seq(as.Date("2013-02-1"),by="month",length.out=7)-1
[1] "2013-01-31" "2013-02-28" "2013-03-31" "2013-04-30" "2013-05-31" "2013-06-30" "2013-07-31"
14
répondu bartektartanus 2013-07-16 15:57:25