【发布时间】:2015-10-21 04:11:00
【问题描述】:
我有一个滴答频率的时间序列,如下所示:
V2 V3
2004-02-01 20:20:41 1.2474 1.2484
2004-02-01 21:13:52 1.2471 1.2481
2004-02-01 21:14:09 1.2469 1.2479
2004-02-01 21:38:57 1.2470 1.2480
2004-02-01 21:56:43 1.2468 1.2478
2004-02-01 21:56:47 1.2466 1.2476
为了将其转换为每日频率,我使用以下代码:
V.xts <- xts(V[, 2:3], order.by=as.POSIXct(V[, 1], format='%d/%m/%y %H:%M:%S'))
V.day<-to.daily(V.xts,OHLC=FALSE)
这会产生以下具有新频率的时间序列:
V2 V3
2004-02-01 1.2475 1.2485
2004-02-02 1.2430 1.2432
2004-02-03 1.2544 1.2546
2004-02-04 1.2537 1.2539
2004-02-05 1.2563 1.2565
2004-02-06 1.2696 1.2706
2004-02-08 1.2642 1.2652
2004-02-09 1.2690 1.2692
2004-02-10 1.2682 1.2684
2004-02-11 1.2827 1.2829
其中,我猜我的代码返回了每日的收盘价,并且没有日期“2004-02-07”的价格。但是,如果日期“2004-02-07”没有价格,我想记录上一期的值来代替缺失值。然后我使用:
V.a <- align.time(V.day)
tmp <- xts(, seq.POSIXt(start(V.a), end(V.a), by='days'))
output <- cbind(tmp, V.a)
但是,我在第二个命令之后得到了这个错误:
Error in seq.POSIXt(start(V1.a), end(V1.a), by = "days") :
'from' must be a "POSIXt" object
我安装了带有依赖项的“xts”包:“动物园”和“日期”。
然后我尝试通过以下命令使用seq:
tmp <- xts(, seq(start(V.a), end(V.a), by='days'))
output <- merge(tmp, V.a, fill=na.locf)
我得到的新数据集看起来像:
2004-02-01 NA NA
2004-02-01 1.2475 1.2485
2004-02-02 1.2475 1.2485
2004-02-02 1.2430 1.2432
2004-02-03 1.2430 1.2432
2004-02-03 1.2544 1.2546
2004-02-04 1.2544 1.2546
2004-02-04 1.2537 1.2539
2004-02-05 1.2537 1.2539
2004-02-05 1.2563 1.2565
2004-02-06 1.2563 1.2565
2004-02-06 1.2696 1.2706
2004-02-07 1.2696 1.2706
2004-02-08 1.2696 1.2706
2004-02-08 1.2642 1.2652
似乎这些命令给了我每天的开盘价和收盘价,其中开盘价是前一天的收盘价。但是,在日期2004-02-07,只记录了前一天的收盘价。用了还是会错过这个价格
Y.data<-as.data.frame(output)
y<-Y.data$V2
y1<-y[seq(2,length(y),2)]
提取所有收盘价。
【问题讨论】:
-
看起来你有一个
Date索引 -
你试过包装
as.POSIXct(start(V.a)) -
感谢@akrun,它可以工作并返回第一行
2004-02-01 13:00:00 NA NA。我想知道是否有办法删除这一行,为什么一直设置为13:01:00? -
检查你的
format字符串,它有斜线而不是-。