每周-字符串格式数据到每周7天一周xts数据框的转换

问题描述

我有一个csv。该文件包含从1997年到2018年的商品价格系列,以每周-字符串格式显示,并且每年恰好有52次观测。这意味着一周定义为七天工作周。我想将此转换为xts格式的新数据帧,其中包含每周(每周7天)时间序列数据(以便与ugarch包兼容)。我是xts格式的新手,不知道如何转换。 预先非常感谢。

这是我的数据的样子;

 week        price
1997-week1    32.1
1997-week2    30.8
1997-week3    24.6
1997-week4    24.7
1997-week5    22.1
1997-week6    22.8
1997-week7    26.8
1997-week8    24
1997-week9    23.5
1997-week10   22.4
1997-week11   21.9
1997-week12   21.1
.
.
1997-week52   51.5
.
.
1998-week1    54
1998-week2    51.5
.
.
2018-week52  117.5

解决方法

假设您拥有的是注释末尾创建的文件, 创建一个函数week2index,将您的周列转换为以下形式:年份+第1周的0/52,年份+第2周的1/52,...,年份+第52周的51/52,然后使用{{ 1}}使用该索引创建一个Zoo对象。最后将其转换为ts系列。

read.zoo

给出该ts系列(或使用Zoo系列z):

library(zoo)

week2index <- function(x) {
  d <- read.table(text = sub("-week"," ",x))
  with(d,V1 + (V2 - 1) / 52)
}
z <- read.zoo("jay.dat",header = TRUE,FUN = week2index,regular = TRUE)
tt <- as.ts(z)

注意

> tt
Time Series:
Start = c(1997,1) 
End = c(1997,12) 
Frequency = 52 
 [1] 32.1 30.8 24.6 24.7 22.1 22.8 26.8 24.0 23.5 22.4 21.9 21.1