0

我有时间序列 T(1), T(2), T(3), T(4)...Tn 另外我还有 2 个其他时间相关参数 P(1), P2(2), P(3 )... 和 R(1),R(2),R(3)... 因此数据看起来像

T(1) P(1) R(1)
T(2) P(2) R(2)
T(3) P(3) R(3)
T(4) P(4) R(4)
T(5) P(5) R(5)
T(6) P(6) R(6)
T(7) P(7) R(7)
T(8) P(8) R(8)
...

I want to reshape the data as follows: 
T(1) T(2) T(3) P(1) P(2) P(3) R(1) R(2) R(3) T(4)
T(2) T(3) T(4) P(2) P(3) P(4) R(2) R(3) R(4) T(5)
T(3) T(4) T(5) P(3) P(4) P(5) R(3) R(4) R(5) T(6)
…

在该特定示例中,最后一列是模型目标,前九列是预测变量。我正在尝试使用前三个时间点 T、P 和 R 来预测 T。

我怎样才能在 R 中做到这一点?我是 R 新手,并且真的很难尝试使用 reshape 包?

对于它的价值,我实际上有 10 个不同的预测器而不是 2 。太感谢了!

4

1 回答 1

1

这可以通过动物园的lag功能来完成。我们也使用mixedsortgtools:

library(zoo)
library(gtools) ##
DF <- data.frame(T = 1:10, P = 11:20, R = 21:30) # test data

z <- zoo(DF)
zL <- cbind(lag(z, 0:2), Y = lag(z$T, 3, na.pad = TRUE))
zL <- na.omit(zL)

# reorder columns
names(zL) <- sub("T", "A", names(zL)) ##
zL <- zL[, mixedsort(names(zL))] ##
names(zL) <- sub("A", "T", names(zL)) ##

mL <- coredata(zL) # matrix

给予:

> mL
     T.lag0 T.lag1 T.lag2 P.lag0 P.lag1 P.lag2 R.lag0 R.lag1 R.lag2  Y
[1,]      1      2      3     11     12     13     21     22     23  4
[2,]      2      3      4     12     13     14     22     23     24  5
[3,]      3      4      5     13     14     15     23     24     25  6
[4,]      4      5      6     14     15     16     24     25     26  7
[5,]      5      6      7     15     16     17     25     26     27  8
[6,]      6      7      8     16     17     18     26     27     28  9
[7,]      7      8      9     17     18     19     27     28     29 10

如果列的顺序zL不重要,则##可以省略以 结尾的行。

于 2014-07-12T05:51:01.553 回答