使用滚动窗口在第二个向量

时间:2016-06-19 12:33:10

标签: r

我是新手,并且在前进的道路上有点卡住了时间序列数据的相关性,其中第二个矢量更长,我想运行一个滚动时间窗口。 / p>

我的数据看起来像这样:

set.seed(1)
# "Target sample"  (this is always of known fixed length N, e.g. 20 )
target <- data.frame(Date=rep(seq(Sys.Date(),by="1 day",length=20)),Measurement=rnorm(2))

# "Potential Sample" (this is always much longer and of unknown length,e.g. 730 in this example)
potential <- data.frame(Date=rep(seq(Sys.Date()-1095,by="1 day",length=730)),Measurement=rnorm(2)) 

我想做的是拍摄一个大小为N的滚动窗口(即与目标样本的大小相匹配),一次将滚动增加一天,然后为每个窗口打印两列:

WindowStartDate cor(target,potentialWindow)的结果

所以在伪代码中(使用上面生成的例子):

  1. 从Sys.Date() - 1095开始,取窗口大小N值
  2. 打印(或者,更好的是,放入新数据框)Sys.Date() - 1095和cor(target,potentialWindow)的结果
  3. 向前滚动1天到Sys.Date() - 1094,取窗口大小N值
  4. 打印(或者,更好的是,放入新的数据框)Sys.Date() - 1094和cor(target,potentialWindow)的结果
  5. 等。等。
  6. N.B。向前滚动+1天显然是一个可以根据所需重叠进行调整的变量。

1 个答案:

答案 0 :(得分:1)

这是我们可以做到的一种方式。请注意,在您的原始示例中,您只指定了rnorm(2),因为R可以回收参数,但它可能不是您想要的。我们只需要初始化一些内容,然后通过for循环发送它。

我们似乎可以从potential数据集中提取您想要的日期,但如果您想使用Sys.Date() - X公式,我已经展示了如何做到这一点

set.seed(1)
# "Target sample"  (this is always of known fixed length N, e.g. 20 )
target <- data.frame(Date = rep(seq(Sys.Date(), by = "1 day", length = 20)),
                     Measurement = rnorm(20))

# "Potential Sample" (this is always much longer and of unknown length,e.g. 730 in this example)
potential <- data.frame(Date = rep(seq(Sys.Date() - 1095, by = "1 day", length = 730)),
                        Measurement = rnorm(730)) 

#initialize values
N <- 20
len_potential <- nrow(potential) - (N - 1)
time_start <- 1096

result.df <- data.frame(Day = potential[1,1],
                        Corr = numeric(len_potential),
                        Day2 = potential[1,1],
                        stringsAsFactors = FALSE
                        )
#use a for loop
for(i in 1:len_potential){
  result.df[i,1] = as.Date(potential[i,1])
  result.df[i,2] = cor(target[,2], potential[i:(i+N-1), 2])
  result.df[i,3] = Sys.Date() - (time_start - i)
}

此外,作为向SO发布问题的说明,有时提供所需的输出会很有帮助。