【问题标题】:R: How can I create a time series object with multiple time scales in an existing R time series class?R:如何在现有的 R 时间序列类中创建具有多个时间尺度的时间序列对象?
【发布时间】:2020-07-04 14:32:12
【问题描述】:

我希望在现有的 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 小时。股票价格数据通常将星期一视为星期五之后的第二天,因为在此期间没有交易发生。等等。

【问题讨论】:

    标签: r class time time-series package


    【解决方案1】:

    假设值是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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-25
      • 2015-03-11
      • 1970-01-01
      • 1970-01-01
      • 2019-02-05
      • 1970-01-01
      • 2015-04-21
      相关资源
      最近更新 更多