【问题标题】:Create time series in R starting 10/1/2019 to 12/30/2019 not including weekends or holidays从 2019 年 10 月 1 日到 2019 年 12 月 30 日,在 R 中创建时间序列,不包括周末或节假日
【发布时间】:2020-07-01 19:37:13
【问题描述】:

我正在尝试使用 ts() 函数创建时间序列。我的数据集有 63 个值,开始日期为 10-01-2019,最后日期为 12-31-2019。该数据集跳过周末和节假日。我正在尝试这个:

ts(data, start = c(2019,10), end = c(2019, 12), frequency = 260) 

因为一年有 260 天,不包括周末,但那是行不通的。我不断得到一个观察次数错误的时间序列(仍然应该有 63 个值,对吧?)我对如何设置它感到困惑。如果有人可以帮助我,那将不胜感激。

谢谢!!

【问题讨论】:

  • 查看timeDate 包,您可以在其中指定工作日和假日日历。 ts 仅适用于常规时间序列,因此无法处理周末和节假日。

标签: r time series


【解决方案1】:

ts 通常用于月度、季度和年度数据,而不是每日数据。如果你想这样做,你可以使用ts(data),它将使用索引1、2等。在最后的注释中使用data

ts(data)
## Time Series:
## Start = 1 
## End = 3 
## Frequency = 1 
## [1] 1 2 3

如果您有一个 Date 类向量 ddata 相同的长度,您可以使用 zoo 或 xts 并使用它或使用 as.ts 将其转换为 ts 像这样(其中索引是自 UNIX 纪元以来的天数)。如果你想指定一个频率,你可以在 zoo 调用中添加一个 frequency= 参数。

library(zoo)
z <- zoo(data, d)
z
## 2019-10-01 2019-10-03 2019-10-04 
##          1          2          3 

as.ts(z)
## Time Series:
## Start = 18170 
## End = 18173 
## Frequency = 1 
## [1]  1 NA  2  3

注意

data <- 1:3
d <- as.Date(c("2019-10-01", "2019-10-03", "2019-10-04"))

【讨论】:

    【解决方案2】:

    您可以按如下方式使用bizdaystimeDate 包:

    library(bizdays)
    library(timeDate)
    
    create.calendar(name='America/New_York', holidays = as.Date(holidayNYSE(2019)), weekdays = c('saturday', 'sunday'), start.date=as.Date('2019-01-01'), end.date = as.Date('2019-12-31'))
    
    bizseq(as.Date('2019-10-01'), as.Date('2019-12-31'), 'America/New_York')
     [1] "2019-10-01" "2019-10-02" "2019-10-03" "2019-10-04" "2019-10-07" "2019-10-08" "2019-10-09"
     [8] "2019-10-10" "2019-10-11" "2019-10-14" "2019-10-15" "2019-10-16" "2019-10-17" "2019-10-18"
    [15] "2019-10-21" "2019-10-22" "2019-10-23" "2019-10-24" "2019-10-25" "2019-10-28" "2019-10-29"
    [22] "2019-10-30" "2019-10-31" "2019-11-01" "2019-11-04" "2019-11-05" "2019-11-06" "2019-11-07"
    [29] "2019-11-08" "2019-11-11" "2019-11-12" "2019-11-13" "2019-11-14" "2019-11-15" "2019-11-18"
    [36] "2019-11-19" "2019-11-20" "2019-11-21" "2019-11-22" "2019-11-25" "2019-11-26" "2019-11-27"
    [43] "2019-11-29" "2019-12-02" "2019-12-03" "2019-12-04" "2019-12-05" "2019-12-06" "2019-12-09"
    [50] "2019-12-10" "2019-12-11" "2019-12-12" "2019-12-13" "2019-12-16" "2019-12-17" "2019-12-18"
    [57] "2019-12-19" "2019-12-20" "2019-12-23" "2019-12-24" "2019-12-26" "2019-12-27" "2019-12-30"
    [64] "2019-12-31"
    

    这个序列有 64 天;您的 63 天可能是因为假期日历的差异。

    【讨论】:

      猜你喜欢
      • 2021-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-10
      • 2020-02-21
      • 1970-01-01
      • 2023-01-13
      • 1970-01-01
      相关资源
      最近更新 更多