我试图弄清楚如何在R中解决这个问题。我想在时间序列数据上使用不同的机器学习回归模型,这是在监督学习领域。在这种情况下,我需要一个函数/包,允许我向前迈步n步,向后退步,就像滑动窗口函数一样。该表显示了输入(t-n)和输出(t + n)变量,当前观察值(t)被视为输出。
var1(t-1) var2(t-1) var1(t) var2(t) var1(t+1) var2(t+1)
1 4 69 5 70 6 71
2 5 70 6 71 7 72
3 6 71 7 72 8 73
4 7 72 8 73 9 74
5 8 73 9 74 10 75
6 9 74 10 75 11 76
7 10 75 11 76 12 77
8 11 76 12 77 13 78
我已经在r-blogger.com研究过一些有用的方法,比如lag()或shift()方法,但在这些例子中,问题是会产生缺失值。
shift<-function(x,shift_by){
stopifnot(is.numeric(shift_by))
stopifnot(is.numeric(x))
if (length(shift_by)>1)
return(sapply(shift_by,shift, x=x))
out<-NULL
abs_shift_by=abs(shift_by)
if (shift_by > 0 )
out<-c(tail(x,-abs_shift_by),rep(NA,abs_shift_by))
else if (shift_by < 0 )
out<-c(rep(NA,abs_shift_by), head(x,-abs_shift_by))
else
out<-x
out
}
shift()函数的结果:
x df_lead2 df_lag2
1 5 4 NA
2 6 5 NA
3 7 6 5
4 8 7 6
5 9 8 7
6 10 9 8
7 11 10 9
8 12 11 10
9 13 NA 11
10 14 NA 12
那么是否存在任何包或实现的函数,它们允许接收数据帧并为每个变量计算指示t-n或t + n的数量?
如果有人可以帮助我会很好。谢谢!
答案 0 :(得分:1)
您可以使用rollapply(zoo):
rollapply(iris$Sepal.Length, width = 3, by = 2, FUN = mean, align = "left")
您可以指定是否要计算值(取决于是否存在后续值(https://rdrr.io/cran/rowr/man/rollApply.html)