以'sweep'的方式将单列矩阵与R中的table组合
Combining a single column matrix with a table in R in the manner of 'sweep'
我有一个名为 '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() 相结合,其中包含 'starts' 每月递减的递减量。
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,3,4,5对应时间序列
输出应该是一个新的 table,如下所示:
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,"-")
但是,显然扫描对 tables 的相关矩阵性质不起作用,例如上述。
非常感谢您的帮助。
不确定这是否理想,但这是一个尝试:
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
我有一个名为 '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() 相结合,其中包含 'starts' 每月递减的递减量。
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,3,4,5对应时间序列
输出应该是一个新的 table,如下所示:
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,"-")
但是,显然扫描对 tables 的相关矩阵性质不起作用,例如上述。
非常感谢您的帮助。
不确定这是否理想,但这是一个尝试:
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