我有一个包含日期列的数据集,其他列是每日索引返回。我希望收到所有指数的滚动标准差,但保留日期以绘制结果。数据如下:
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列中继续显示相应的日期。
答案 0 :(得分:2)
这里真正的问题是使用数据帧来表示时间序列。如果你使用时间序列表示,那么整个问题就会消失。
mydata_z <- read.zoo(mydata)
r <- rollapplyr(mydata_z, 30, sd, na.rm = TRUE, fill = NA)
现在,您可以使用plot.zoo
,xyplot.zoo
或autoplot.zoo
分别使用经典图形,网格图形或ggplot2图形来绘制r
,或者如果您需要数据框,则{ {1}}。