web-dev-qa-db-ja.com

潤滑油を使用した日付のRシーケンス

こんにちは私は潤滑油で日付のシーケンスを取得しようとしています

これは機能しません

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')

トリックをします

56
Tahnoon Pasha

ymdは、日付文字列を解析するラッパーであり、POSIXctオブジェクトを返します。

?seq.POSIXtlubridateではなく)で説明されている標準的な用語を使用して、週を定義するだけです。

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')

lubridatePeriodクラスオブジェクトをdifftimeに強制することもできますが、それはかなり不要なようです

seq(ymd('2012-04-07'),ymd('2013-03-22'), by = as.difftime(weeks(1)))
62
mnel

これは、POSIXctlubridateユニバースに固執する方法であり、日付形式をベース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」は「月の加算」を表していません。私の最高の推測は「魔法」です=)

4
rrr