[英]R: How can I create a time series object with multiple time scales in an existing R time series class?
我希望在现有的 R 时间序列类型之一中创建一个时间序列对象,其中观察值用两种时间标记:序数时间,连续整数的索引大于、小于或等于观察之前,之后,或与另一个同时; 和基本时间,由标准日期(天,至少对于初学者而言)组成。
我的实际数据来自三个子日周期,每个周期都可以有多个(数字,非计数)观察或零观察。 我的订单指数是我衡量时间的主要指标,它将同一时期的观察结果视为同一时间,并删除没有发生任何事件的时期。 我还想要日期,因为我想测试日历效果。
这是一个玩具数据集:
set.seed(1)
dates. <- seq(as.Date("2020-03-03"), by = "day", length.out=8)[c(1, 1, 2, 3, 3, 3, 4, 4, 4, 8, 8, 8, 8)]
index. <- c(1, 2, 3, 4, 4, 5, 6, 7, 8, 9, 9, 9, 10)
dat. <- rnorm(13)
tib_ts <- tibble(dates., index., dat.)
tib_ts
# A tibble: 13 x 3
dates. index. dat.
<date> <dbl> <dbl>
1 2020-03-03 1 -0.626
2 2020-03-03 2 0.184
3 2020-03-04 3 -0.836
4 2020-03-05 4 1.60
5 2020-03-05 4 0.330
6 2020-03-05 5 -0.820
7 2020-03-06 6 0.487
8 2020-03-06 7 0.738
9 2020-03-06 8 0.576
10 2020-03-10 9 -0.305
11 2020-03-10 9 1.51
12 2020-03-10 9 0.390
13 2020-03-10 10 -0.621
我试图弄清楚如何使用 zoo、xts 和 tsibble 来做到这一点,但遇到了两个问题。 首先,虽然每个观察都有自己的日期和索引值,但日期和索引值都可以与在无法区分的时间(在那个时间尺度)发生的多个观察相关联。 第二个是我想在有时一个时间度量上使用通常的时间工具数组,有时在另一个时间度量上使用,并且还没有找到在度量之间来回切换的方法。
但是,我确信一个实现必须已经存在于现有的类或包中,因为相同或相似的时间结构存在常见问题。 以美元价值的大伤亡损失为例,按小时、天或月汇总。 在任何聚合规模下,都会有没有损失的时期和有多个损失的时期。 与每日最高和最低值类似,无论是温度还是股票价格。 你知道它们在昨天的高点和低点之后和明天之前,但你知道哪个先到,或者它们是相隔两分钟还是 20 小时。 股票价格数据通常将周一视为周五后的第二天,因为在此期间没有交易发生。 等等。
假设值是values
,数字是ix
,日期是d
。 然后将数字分配给d
的名称并使用它创建一个动物园对象:
library(zoo)
values <- 1:4
ix <- c(0, 3, 4, 6)
d <- as.Date("2000-01-01") + ix
names(d) <- ix
z <- zoo(values, d)
time(z)
## 0 3 4 6
## "2000-01-01" "2000-01-04" "2000-01-05" "2000-01-07"
在这个例子中,任意两个数字之间的差异和对应日期之间的差异是相同的,但这不是必需的。 这些数字可能与日期无关。
如果数字确实与日期有上述关系,那么另一种可能性是只使用日期,然后在需要时使用它来导出数字:
zz <- zoo(values, unname(d))
as.numeric(time(zz) - time(zz)[1]) # derive numbers from dates
## [1] 0 3 4 6
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.