我的时间序列的刻度频率如下所示:
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'软件包:'zoo'和'date'。
然后我尝试使用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)]
提取所有收盘价。
答案 0 :(得分:1)
您不应该出于这样的原因直接调用方法。如果您只是调用泛型seq
并让它进行方法调度,那么您的代码将正常工作。
您还可以使用merge
及其fill
参数,使用NA
将na.locf
替换为之前的值。
您无需致电align.time
。我不确定你认为你需要的原因,但它可能只会导致日常数据出现问题。
tmp <- xts(, seq(start(V.day), end(V.day), by='days'))
output <- merge(tmp, V.day, fill=na.locf)