2013-07-16 12 views
9

Ich möchte die Datumssequenz zwischen einem startDate und endDate durch Hinzufügen von 1 Monat zum startDate erhalten. dh wenn startDate ist 2013.01.31 und endDate ist 2013.07.31, würde ich es vorziehen, diese Daten wie zu sehen:R: Hinzufügen von 1 Monat zu einem Datum

„2013.01.31“ „2013.02.28“ „2013 -03-31" "2013.04.30" "2013.05.31" "2013.06.30" "2013.07.31"

ich habe seq.Date(as.Date("2013-01-31"),by="month",length.out=7) versucht. Aber der Ausgang dieses Codes ist wie dies

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

Also, was die einfachste Lösung ist die richtige Ausgabe zu bekommen?

+6

Wenn Sie monatliche Daten verwenden, ist die einfachste Lösung, Zoos "Yearmon" -Klasse zu verwenden. –

Antwort

16

Ich habe mit Daten in R zu arbeiten, und eine der nützlichsten Pakete, die ich für aktuelle Daten gefunden ist lubridate. Für Ihr Problem, können Sie einfach wie folgt vor:

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 auch viele andere Funktionen für Daten hat, und ich sehr empfehlen, einen Blick.

+0

Sicher, .i arbeite auch mit Daten. also könnte mir dieses Paket sehr helfen, danke ... –

14

Das funktioniert nicht, weil R nicht sicher ist, was mit dem letzten Tag des Monats zu tun ist :) So habe ich einfache Lösung. Machen Sie dasselbe, aber ersten Tag des nächsten Monats verwenden und dann subtrahieren 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..dies ist eine Coool-Lösung. thanx bro .. –

+0

Fehler Fehler ..... es funktioniert nicht für Datum = "2013-01-30" > seq (as.Date ("2013-01-30") + 1, von = "Monat" , 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

Was möchten Sie tun? Holen Sie sich den vorletzten Tag des Monats? Wenn ja, verwenden Sie Seq (as.Date ("2013-02-1"), von = "Monat", 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