时间序列数据安排

时间:2015-11-07 06:00:35

标签: r indexing time series

enter image description here

我有几个时间序列数据,我试图在进一步分析之前做出安排。关键是,正如您在图片中看到的那样,3个金融时间序列具有不同的日期。如果至少有一条消隐线,我想消除整条线。为了做出安排,我首先在2005年1月1日至2015年6月30日的星期六和星期日之前将整个日期排在左侧,以便编制索引。

示例:在第11行,存在无法比拟的日期。我想把NA列放在中间。

这是我尝试过的事情

Day=data.frame(test[,1:2])
Rk=data.frame(test[,3:4])
Vix=data.frame(test[,5:6])
BA=data.frame(test[,7:8])

i=1
k=0
while(i<=2736){
if(Day[i,1]==Rk[i,1]){i=i+1}
else if(Day[i,1]!=Rk[i,1]){
k=k+1
Rk[i+1:k+2634,]=Rk[i:k+2633,]
Rk[i,]=c(Day[i,1],NA)
i=i+1}

}

但它显示错误消息:要替换的项目数不是替换长度的倍数

我将非常感激。任何形式的帮助都将受到欢迎。

1 个答案:

答案 0 :(得分:0)

如果您使用像xts(或zoo)这样的时间序列类,这相当容易。

# create sample data
set.seed(21)
dayone <- as.Date("2005-01-03")
plusdays <-c(0:4, 7:11, 14:18, 21:24)
test <- data.frame(date=dayone + plusdays)
test$day <- weekdays(test$date, abbreviate=TRUE)
test$date.1 <- dayone + c(plusdays[-11L], 25)
test$Kernel <- rnorm(nrow(test), 3e-5, 1e-6)
test$date.2 <- dayone + c(plusdays[-11L], 25)
test$VIX.High <- round(rnorm(nrow(test), 14, 0.1), 2)
test$date.3 <- dayone + c(plusdays[-11L], 25)
test$Baa.Aaa <- round(rnorm(nrow(test), 0.66, 0.01), 2)

require(xts)
# create xts objects for each column
Rk <- xts(test['Kernel'], test$date.1)
Vix <- xts(test['VIX.High'], test$date.2)
Ba <- xts(test['Baa.Aaa'], test$date.3)
# use xts to merge data
testxts <- merge(xts(,test$date), Rk, Vix, Ba)

我遗漏了你的day列,因为xts / zoo对象只是一个带索引属性的矩阵,你不能在矩阵中混合类型。但是您可以使用.indexwday函数来提取每行的工作日。