如何才能将时间序列数据组织到数据框的对角线上?

时间:2016-04-27 08:36:17

标签: r matrix time-series diagonal

如果我有这样的月度时间序列:

xts <- ts(c(1:48), frequency = 12)


  Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
1   1   2   3   4   5   6   7   8   9  10  11  12
2  13  14  15  16  17  18  19  20  21  22  23  24
3  25  26  27  28  29  30  31  32  33  34  35  36
4  37  38  39  40  41  42  43  44  45  46  47  48

如何将值组织在“对角线”上,其他地方为零?如下所示(此格式继续执行xts中的所有值):

  Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
1   1   0  0   0   0   0   0   0   0   0   0   0   
2   0   2  0   0   0   0   0   0   0   0   0   0 
3   0   0  3   0   0   0   0   0   0   0   0   0   
4   0   0  0   4   0   0   0   0   0   0   0   0
5   0   0  0   0   5   0   0   0   0   0   0   0
6   0   0  0   0   0   6   0   0   0   0   0   0   
7   0   0  0   0   0   0   7   0   0   0   0   0   
8   0   0  0   0   0   0   0   8   0   0   0   0
9   0   0  0   0   0   0   0   0   9   0   0   0   
10  0   0  0   0   0   0   0   0   0   10  0   0   
11  0   0  0   0   0   0   0   0   0   0   11  0   
12  0   0  0   0   0   0   0   0   0   0   0  12
13  13  0  0   0   0   0   0   0   0   0   0   0   
14  0   14 0   0   0   0   0   0   0   0   0   0 
15  0   0  15  0   0   0   0   0   0   0   0   0   
16  0   0  0   16  0   0   0   0   0   0   0   0
17  0   0  0   0   17  0   0   0   0   0   0   0
18  0   0  0   0   0   18  0   0   0   0   0   0   
19  0   0  0   0   0   0   19  0   0   0   0   0   
20  0   0  0   0   0   0   0   20  0   0   0   0
21  0   0  0   0   0   0   0   0   21  0   0   0   
22  0   0  0   0   0   0   0   0   0   22  0   0   
23  0   0  0   0   0   0   0   0   0   0   23  0   
24  0   0  0   0   0   0   0   0   0   0   0  24

我正在使用需要这种格式的建模软件包,并且很难找到像“Matrix”和“diag”这样的软件包中的解决方案,这些软件包似乎没有以这种方式排列数据。

1 个答案:

答案 0 :(得分:0)

行绑定诊断的解决方案。

rbind(diag(1:12,12,12), diag(13:24, 12,12), diag(25:36, 12,12 ), diag(37:48,12,12))