我希望在现有的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和tsible来解决这个问题,但遇到了两个问题。首先,尽管每个观测都有自己的日期和索引值,但日期和索引值都可以与多个观测相关联,这些观测有时无法区分(在该时间尺度上(。第二,我想在一个时间尺度上使用通常的时间工具阵列,有时在另一个时间度量上使用,但还没有找到在度量之间来回切换的方法。
然而,我确信,实现必须已经存在于现有的类或包中,因为在相同或相似的时间结构中存在常见问题。例如,按美元价值计算的重大伤亡损失,按小时、天或月计算。在任何聚合规模下,都会有没有损失的时期和有多个损失的时期。与每日的高值和低值类似,无论是温度还是股价。你知道它们在昨天的高点和低点之后,在明天的高点和高点之前出现,但你知道哪一个先出现,或者它们是相隔两分钟还是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