2

我有一个名为“starts”的初始起始值的单列矩阵(rbind 操作的结果),用于几个从不同月份开始的时间序列,如下所示:

starts <- matrix(rep(100,5),ncol=1)
rownames(starts) <- month.name[1:5]
starts          
          [,1]
January   100
February  100
March     100
April     100
May       100

显然,实际上起始数字并不总是 100。

我的目标是将其与一个单独的 table() 结合起来,其中包含“开始”每月减少的递减量。

mytable <- structure(c(20L, 0L, 0L, 0L, 0L, 10L, 10L, 0L, 0L, 0L, 5L, 10L, 
5L, 0L, 0L, 5L, 10L, 5L, 10L, 0L), .Dim = c(5L, 4L), .Dimnames = list(
    c("1", "2", "3", "4", "5"), c("1", "2", "3", "4")), class = "table")
mytable

    1    2   3   4
1  20   10   5    5
2   0   10  10   10
3   0    0   5    5
4   0    0   0   10
5   0    0   0    0

这里的周期:1、2、3、4 是指月份之间的周期,因此周期 1 显示时间序列值在 1 月和 2 月之间减少了多少。垂直数字 1、2、3、4、5 对应于时间序列。

输出应该是一个如下所示的新表:

         January  February  March  April   May
January    100       80      70      65     60
February            100      90      80     70
March                       100      95     90
April                               100     90
May                                        100

我想我也许可以用扫描方式的函数来做到这一点,例如:

result <- sweep(starts,2,mytable,"-")

然而,显然扫描不适用于相关矩阵性质的表格,例如上述。

非常感谢您的帮助。

4

1 回答 1

4

不确定这是否理想,但这是一个尝试:

starts[,rep(1,5)] - cbind(0, t(apply(mytable, 1, cumsum)) )

#         [,1] [,2] [,3] [,4] [,5]
#January   100   80   70   65   60
#February  100  100   90   80   70
#March     100  100  100   95   90
#April     100  100  100  100   90
#May       100  100  100  100  100
于 2015-11-10T00:38:03.740 回答