将单个列矩阵与R中的表以“扫描”的方式组合。

时间:2015-11-10 00:16:15

标签: r r-table

我有一个名为'开始'的初始起始值的单个列矩阵(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。

我的目标是将其与一个单独的表格()结合起来,该表格包含减少的数量,这些数量来自于&#39;每月减少。

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,"-")

然而,显然扫描对于相关矩阵性质的表不起作用,如上所述。

非常感谢您的任何帮助。

1 个答案:

答案 0 :(得分: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