R:Rollapply,保留Date列

时间:2018-06-09 08:41:09

标签: r as.date rollapply

我有一个包含日期列的数据集,其他列是每日索引返回。我希望收到所有指数的滚动标准差,但保留日期以绘制结果。数据如下:

head(mydata)

        Date      GL1 GL2       US CN       JP       DE       UK
1 1990-01-03  0.02460  NA -0.25889 NA       NA  3.00128  1.20872
2 1990-01-04  0.33681  NA -0.86503 NA       NA -1.82327 -0.49234
3 1990-01-05 -0.81943  NA -0.98041 NA -1.13817 -0.86874 -0.29003
4 1990-01-06       NA  NA       NA NA       NA       NA       NA
5 1990-01-07       NA  NA       NA NA       NA       NA       NA

使用rollapply函数时,日期会消失并返回NAs

require(zoo)

Rolling = as.data.frame(rollapply(mydata,30,sd,na.rm=TRUE,align="right"))

head(Rolling)
 Date       GL1 GL2       US CN        JP       DE        UK
1   NA 0.5527451  NA 1.033204 NA 0.9021960 1.486567 0.8421562
2   NA 0.5675608  NA 1.057156 NA 0.9318496 1.467637 0.7954081
3   NA 0.5681388  NA 1.077253 NA 0.9318496 1.438117 0.8123918
4   NA 0.5663124  NA 1.095049 NA 0.9264034 1.454327 0.8331727
5   NA 0.5623544  NA 1.075118 NA 0.9017324 1.443547 0.8123613
6   NA 0.5523878  NA 1.052310 NA 0.8797660 1.411220 0.8197624

我将日期保留为as.Date格式,但无法弄清楚如何在Date列中继续显示相应的日期。

1 个答案:

答案 0 :(得分:2)

这里真正的问题是使用数据帧来表示时间序列。如果你使用时间序列表示,那么整个问题就会消失。

mydata_z <- read.zoo(mydata)
r <- rollapplyr(mydata_z, 30, sd, na.rm = TRUE, fill = NA)

现在,您可以使用plot.zooxyplot.zooautoplot.zoo分别使用经典图形,网格图形或ggplot2图形来绘制r,或者如果您需要数据框,则{ {1}}。