我是新手,并且在前进的道路上有点卡住了时间序列数据的相关性,其中第二个矢量更长,我想运行一个滚动时间窗口。 / 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)的结果
所以在伪代码中(使用上面生成的例子):
N.B。向前滚动+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发布问题的说明,有时提供所需的输出会很有帮助。