2011-08-10 3 views
6

が月末にで終了し、一定の長さの月次シーケンスを取得するにはどうすればよいですか? seq(as.Date(*), length, by="month")は、終了日ではなく開始日が与えられていると仮定し、AFAIKではこの場合にはbyに負の値を指定することはできません。負の日付シーケンス

ETA:つまり、指定した期間にまたがるシーケンスが必要ですが、開始ポイントではなくエンドポイントが指定されています。だから、seq(to="2000-03-01", len=3, by="month") --> 2000-01-01, 2000-02-01, 2000-03-01のようなものです。

答えて

11

これを試してみてください。

rev(seq(as.Date("2000-03-01"), length = 3, by = "-1 month")) 
## [1] "2000-01-01" "2000-02-01" "2000-03-01" 
+2

Argh!私は、 "?seq.Date"の中に "これはオプションで(正または負の)整数で始めることができる"というビットを見逃しているとは思えません。 –

0

たぶん、あなただけの増分としてby=monthを使用して、前方にそれを計算することができ、その後、逆:ここ

R> rev(seq(as.Date("2011-01-01"), length=6, by="month")) 
[1] "2011-06-01" "2011-05-01" "2011-04-01" "2011-03-01" "2011-02-01" "2011-01-01" 
+0

ありがとうございました。私は後です。あなたの例では、 '2010-08-01 2010-09-01 2010-10-01 2010-11-01 2010-12-01 2011-01-01'のようになります。 –

+0

Gaborは正解です。私はそのことについても忘れていた。 –

0

あなたが行きます。基本機能のみ:

last.days.of.month <- function(dt) {ldt<- as.POSIXlt(dt) 
               ldt$mon <- ldt$mon+1 
               ldt$mday <- 1 
            return(format(ldt -1, "%Y-%m-%d"))} 
last.days.of.month(as.Date(c("2010-01-06","2010-03-06", "2010-02-06")) ) 
# [1] "2010-01-31" "2010-03-31" "2010-02-28" 

seq.ldom <- function(dt, nmonths) {ldt<- rep(as.POSIXlt(dt)[1], nmonths) 
            ldt$mon <- ldt$mon+seq(1:nmonths) 
            ldt$mday <- 1 
         return(format(ldt -1, "%Y-%m-%d"))} 
seq.ldom(as.Date("2010-01-06"), 5) 
#[1] "2010-01-31" "2010-02-28" "2010-03-31" "2010-04-30" 
#[5] "2010-05-31" 

ああ、何かの理由で私はあなたが月の最後の日を望んだと思った。無駄なコードを残念に思っています。月の最初の日は難しくありません。

seq.fdom <- function(dt, nmonths) {ldt<- rep(as.POSIXlt(dt)[1], nmonths) 
             ldt$mon <- ldt$mon+seq(0:(nmonths-1)) 
             ldt$mday <- 1 
          return(format(ldt , "%Y-%m-%d"))} 
seq.fdom(as.Date("2010-01-06"), 5) 
#[1] "2010-02-01" "2010-03-01" "2010-04-01" "2010-05-01" 
#[5] "2010-06-01" 

前ヶ月を取得し、次のいずれか(。カヌーのパドルで殴り殺されていない場合)

seq.prior.fdom <- function(dt, nmonths) {ldt<- rep(as.POSIXlt(dt)[1], nmonths) 
             ldt$mon <- ldt$mon-rev(0:(nmonths-1)) 
             ldt$mday <- 1 
          return(format(ldt , "%Y-%m-%d"))} 
     seq.prior.fdom(as.Date("2010-01-06"), 5) 
#[1] "2009-09-01" "2009-10-01" "2009-11-01" "2009-12-01" 
#[5] "2010-01-01" 

私は基本的な原理は明らかだと思う

5
library(lubridate) 
ymd('2011-03-03') - months(0:5) 
関連する問題