問題の説明
私は三月のデータをたくさん扱っています。毎月 3 回 (またはほぼ 10 日ごと、10 日ごと)、これは、旧ソ連の水関連データと、世界中のより多くの気候/水関連データ セットの典型的なレポート間隔です。以下は、2 つの変数を含むデータ セットの例です。
> date = unique(floor_date(seq.Date(as.Date("2019-01-01"), as.Date("2019-12-31"),
by="day"), "10days"))
> example_data <- tibble(
date = date[day(date)!=31],
value = seq(1,36,1),
var = "A") %>%
add_row(tibble(
date = date[day(date)!=31],
value = seq(10,360,10),
var = "B"))
> example_data
# A tibble: 72 x 3
# Groups: var [2]
date value var
<ord> <dbl> <chr>
1 2019-01-01 1 A
2 2019-01-01 10 B
3 2019-01-11 2 A
4 2019-01-11 20 B
5 2019-01-21 3 A
6 2019-01-21 30 B
7 2019-02-01 4 A
8 2019-02-01 40 B
9 2019-02-11 5 A
10 2019-02-11 50 B
# … with 62 more rows
この例では、1.、11.、および 21. を選択して 10 年の日付を示していますが、実際には、1 か月あたり 1 ~ 3 デカド (1 年あたり 1 ~ 12 ヶ月に類似) または 1 デカドでインデックス化する方が適切です。年間 36 まで (年間通算日と同じ)。最も洗練された解決策は、 のようなデカダル データの適切な日付形式を持つことyearmonth
ですlubridate
。ただし、lubridate
近い将来 dekadal データをサポートする予定はないかもしれません ( github の会話)。
tsibble
と を使用したワークフローがありますtimetk
が、これは月次データでうまく機能しますが、元のデカダル時間ステップで作業する方が実際には適切であり、面倒な回避策を最小限に抑えてデカダル データで tidyverse 関数を使用できる方法を探しています。できるだけ。
tsibble の dekadal データに毎日の日付を使用する際の問題は、時間間隔が毎日として識別され、1 か月あたりの 3 つの値の間に多くのデータ ギャップが生じることです。
> example_data_tsbl <- as_tsibble(example_data, index = date, key = var)
> count_gaps(example_data_tsbl, .full = FALSE)
# A tibble: 70 x 4
var .from .to .n
<chr> <date> <date> <int>
1 A 2019-01-02 2019-01-10 9
2 A 2019-01-12 2019-01-20 9
3 A 2019-01-22 2019-01-31 10
# …
これが私がこれまでにしたことです:
- ここでは、順序付き因子をインデックスとして定義する可能性を見ました
tsibble
が、因子をインデックスtimetk
として認識しません。timetk
カスタム インデックスを定義することを提案します (2. を参照)。 - tsibble にカスタム インデックスを追加する可能性はありますが、これに関する例が見つからず、これらの関数をどのように使用する必要があるかわかりません (ビネットはまだ計画中です)。関数を使用して dekadal データをサポートする方法を理解しようとコードを読み始めましたが、少し圧倒されます。
質問
tsibble の dekadal カスタム インデックスは yearmonth または weekyear と同様に動作しますか?
カスタム インデックスを tsibble に追加する方法について共有する例を誰かここに持っていますか?
または、tidyverse でデカダル データをエレガントに処理する別の方法を知っている人はいますか?