首页 > 解决方案 > R:滚动应用,保留日期列

问题描述

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

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 函数时,日期会消失并返回 NA

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 列中显示相应的日期。

标签: ras.daterollapply

解决方案


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

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

现在您可以使用plot.zoo,xyplot.zooautoplot.zoo分别使用经典图形、格子图形或 ggplot2 图形来绘制r图形,或者如果您需要数据框则fortify.zoo(r)


推荐阅读