こんにちは私は潤滑油で日付のシーケンスを取得しようとしています
これは機能しません
seq(ymd('2012-04-07'),ymd('2013-03-22'),by=week(1))
基本コマンド
seq(as.Date('2012-04-7'),as.Date('2013-03-22'),'weeks')
しかし、私は潤滑油でこれを行うエレガントな方法があるかどうかを知りたいです。
[〜#〜] edit [〜#〜]
無視してください:自分自身を解決したので、後世のために残してください。必要に応じて削除してください。
seq(ymd('2012-04-07'),ymd('2013-03-22'),by='weeks')
トリックをします
ymd
は、日付文字列を解析するラッパーであり、POSIXct
オブジェクトを返します。
?seq.POSIXt
(lubridate
ではなく)で説明されている標準的な用語を使用して、週を定義するだけです。
seq(ymd('2012-04-07'),ymd('2013-03-22'), by = '1 week')
seq(ymd('2012-04-07'),ymd('2013-03-22'), by = 'weeks')
動作します
意志として
seq(ymd('2012-04-07'),ymd('2013-03-22'), by = '2 week')
lubridate
Period
クラスオブジェクトをdifftime
に強制することもできますが、それはかなり不要なようです
seq(ymd('2012-04-07'),ymd('2013-03-22'), by = as.difftime(weeks(1)))
これは、POSIXct
のlubridate
ユニバースに固執する方法であり、日付形式をベースRのPOSIXt
に変更しません。バグ(タイムゾーンの変更やタイムスタンプの喪失など)が導入される一般的な場所であるため、スクリプトの日付形式を変更しないようにします。 %m+%
を使用するには、このアドバイスに従います。 R:日付に1か月を追加
# example date is a leap day for a "worst case scenario"
library("lubridate")
posixct.in <- parse_date_time(x = "2016-02-29", orders = "ymd")
# [1] "2016-02-29 UTC"
posixct.seq <- posixct.in %m+% years(x = seq.int(from = 0, to = 3, by = 1))
# [1] "2016-02-29 UTC" "2017-02-28 UTC" "2018-02-28 UTC" "2019-02-28 UTC"
posixct.seq <- posixct.in %m+% months(x = seq.int(from = 0, to = 3, by = 1))
# [1] "2016-02-29 UTC" "2016-03-29 UTC" "2016-04-29 UTC" "2016-05-29 UTC"
posixct.seq <- posixct.in %m+% days(x = seq.int(from = 0, to = 3, by = 1))
# [1] "2016-02-29 UTC" "2016-03-01 UTC" "2016-03-02 UTC" "2016-03-03 UTC"
posixct.seq <- posixct.in %m+% weeks(x = seq.int(from = 0, to = 3, by = 1))
# [1] "2016-02-29 UTC" "2016-03-07 UTC" "2016-03-14 UTC" "2016-03-21 UTC"
通常の+
も時々機能しますが、%m+%
は次のようなエラーを防ぎます:
posixct.seq <- posixct.in + years(x = seq.int(from = 0, to = 3, by = 1))
# [1] "2016-02-29 UTC" NA NA NA
最初、%m+
は月を追加するための単なる手段であり、%y+%
などの同様のlubridate
コマンドは存在しないと思ったため、混乱しました。しかし、「m」は「月の加算」を表していません。私の最高の推測は「魔法」です=)