【发布时间】:2021-01-22 13:32:13
【问题描述】:
问题描述
我经常使用三倍月度数据。每月三次(或大约每 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. 迄今为止的几十年,但实际上以每月 1 到 3 为单位对它们进行索引更合适(类似于每年的第 1 到 12 个月)或在 dekad 1 到 36 每年(类似于一年中的一天)。最优雅的解决方案是在lubridate 中为像yearmonth 这样的dekadal 数据设置适当的日期格式。但是,lubridate 可能不打算在不久的将来支持 dekadal 数据 (github conversation)。
我有使用 tsibble 和 timetk 的工作流,它们可以很好地处理月度数据,但使用原始的十进制时间步骤确实更合适,我正在寻找一种能够使用 tidyverse 的方法使用 dekadal 数据的函数,使用尽可能少的繁琐变通方法。
在 tsibble 中对 dekadal 数据使用每日日期的问题在于,它将时间间隔标识为每日,并且您每月的 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
# …
这是我到目前为止所做的:
- 我看到here 可以在
tsibble中将有序因子定义为索引,但timetk不将因子识别为索引。timetk建议定义自定义索引(参见 2.)。 - 有add custom indices to tsibble 的可能性,但我没有找到这方面的例子,我不明白我必须如何使用这些功能(a vignette is still planned)。我已经开始阅读代码以尝试了解如何使用这些函数来获得对 dekadal 数据的支持,但我有点不知所措。
问题
-
tsibble 中的 dekadal 自定义索引的行为是否与 yearmonth 或 weekyear 类似?
-
这里有人可以分享如何将自定义索引添加到 tsibble 的示例吗?
-
或者有人知道在 tidyverse 中优雅地处理 dekadal 数据的另一种方法吗?
【问题讨论】:
标签: r date customization tsibble