2013-07-16 14 views
9

startDate ve endDate arasındaki tarih dizisini startDate'a 1 ay ekleyerek tarih dizisini almak istiyorum.R: tarihe 1 ay ekleniyor

"2013/01/31" "2013/02/28" "2013: startDate 2013/01/31 ve endDate 2013/07/31 ise eğer yani, böyle bir tarih görmeyi tercih ettiğini "2013/04/30" "2013/05/31" "2013/06/30" -03-31" "2013/07/31"

Ben seq.Date(as.Date("2013-01-31"),by="month",length.out=7) çalıştılar. Ama bu kodun çıktısı Yani, doğru çıktı almak için en basit çözüm nedir bu

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

gibidir?

+6

Aylık veri kullanıyorsanız, en kolay çözüm hayvanat bahçesi 'yearmon' sınıfını kullanmaktır. –

cevap

16

Ben R tarihleri ​​ile çalışmak zorunda ve ben tarih verisi için bulunan en yararlı paketlerinden biri lubridate olduğunu. senin sorun için, sadece aşağıdakileri yapabilirsiniz:

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 da tarihlerde birçok işleve sahiptir ve son derece göz alarak önerilir.

+0

elbette, ayrıca tarihlerle de çalışırız. Yani bu paket bana çok yardımcı olabilir, thanx ... –

14

Bu, çalışmıyor çünkü R, ayın son günü ile ne yapacağından emin değil :) Bu yüzden basit bir çözümüm var. de yapın ama bir sonraki ayın 1. günü kullanmak ve daha sonra 1 substract:

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..this bir coool çözümüdür. thanx bro .. –

+0

bug bug ..... bu çalışma için çalışmıyor = "2013-01-30" > seq (as.Date ("2013-01-30") + 1, by = "month" , 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

Ne yapmak istiyorsun? Ayın son gününe ikinci ol eğer öyleyse seq (as.Date ("2013-02-1"), = "month", length.out = 7) kullanın -2 [1] "2013-01-30" "2013- 02-27 "" 2013-03-30 "" 2013-04-29 "" 2013-05-30 "" 2013-06-29 "" 2013-07-30 " – bartektartanus