R:如何在现有的R时间序列类中创建具有多个时间刻度的时间序列对象



我希望在现有的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

最新更新