问题描述
我有一个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