2013-07-16 19 views
9

Desidero ottenere la sequenza di date tra startDate e endDate aggiungendo 1 mese allo startDate. vale a dire, se è startDate 2013/01/31 e 2013/07/31 endDate è, preferirei vedere le date di questo tipo:R: aggiunta da 1 mese a una data

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

ho cercato seq.Date(as.Date("2013-01-31"),by="month",length.out=7). Ma l'uscita di questo codice è come questo

> 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" 

Quindi, qual è la soluzione più semplice per ottenere l'output corretto?

+6

Se si utilizzano dati mensili, la soluzione più semplice è utilizzare la classe 'yearmon' dello zoo. –

risposta

16

devo lavorare con date in R, e uno dei pacchetti più utili che ho trovato per i dati di data è lubridate. Per il vostro problema, si può semplicemente effettuare le seguenti operazioni:

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 ha anche molte altre funzioni per le date, e consiglio vivamente di dare un'occhiata.

+0

certo, .io lavoro anche con le date. quindi questo pacchetto potrebbe aiutarmi molto, grazie ... –

14

Questo non funziona, perché R non è sicuro su cosa fare l'ultimo giorno del mese :) Quindi ho una soluzione semplice. Fate lo stesso, ma utilizzare 1 ° giorno del mese successivo e quindi sottrarre 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" 
+5

waaw..questa è una soluzione di coool. grazie bro ... –

+0

bug bug ..... non funziona per data = "2013-01-30" > seq (as.Date ("2013-01-30") + 1, da = "mese" , length.out = 7) -1 [1] "2013-01-30" "2013-03-02" "2013-03-30" "2013-04-30" "2013-05-30" "2013 -06-30 "" 2013-07-30 " –

+0

Cosa vuoi fare? Ricevi il penultimo giorno del mese? in caso affermativo utilizzare seguenti (as.Date ("2013/02/01"), da = "mese", length.out = 7) -2 [1] "2013/01/30" "2013- 02-27 "" 2013-03-30 "" 2013-04-29 "" 2013-05-30 "" 2013-06-29 "" 2013-07-30 " – bartektartanus

Problemi correlati