将数据转换为季度收益

时间:2019-08-22 10:01:39

标签: r matrix accumulate

我需要将我所有的月度回报数据转换为季度回报。但这必须以特定的方式完成。我将问题设置如下:

mat1 <- matrix(nrow = 2, 
               ncol = (37 + 37), 
               data = rnorm(74, 0, 1))

seperate.mat <- c()
seq1 <- seq (37, 74, 37)
for (i in seq1) {
  seperate.mat[[which(i == seq1)]] = mat1[, (i - 36):i]
}
seperate.mat[[1]]
seperate.mat[[2]]

对于seperate.mat [[i]]中的每一行,我需要将每月回报数据转换为季度数据。

> mat1
           [,1]       [,2]        [,3]       [,4]        [,5]       [,6]      [,7]       [,8]        [,9]       [,10]     [,11]     [,12]      [,13]     [,14]
[1,]  0.4342922 -1.4269698 0.488264775 -0.5366129  0.04941425 -0.2497828 -1.439336 -3.3251713  1.10019063  0.18061550 0.5497727 0.1029185 -1.1238067 0.7291232
[2,] -1.0269178 -0.2531924 0.001663337 -0.6085732 -1.59923701 -0.2183555  1.663534 -0.1202581 -0.03978411 -0.09819961 0.4751221 1.0787960  0.2576227 0.4813277

> seperate.mat[[1]]
           [,1]       [,2]        [,3]       [,4]        [,5]       [,6]      [,7]       [,8]        [,9]       [,10]     [,11]     [,12]      [,13]     [,14]
[1,]  0.4342922 -1.4269698 0.488264775 -0.5366129  0.04941425 -0.2497828 -1.439336 -3.3251713  1.10019063  0.18061550 0.5497727 0.1029185 -1.1238067 0.7291232
[2,] -1.0269178 -0.2531924 0.001663337 -0.6085732 -1.59923701 -0.2183555  1.663534 -0.1202581 -0.03978411 -0.09819961 0.4751221 1.0787960  0.2576227 0.4813277

然后新输出的第1行中的第一个条目。矩阵将是(1 + 0.43)(1-1.43)(1 + 0.49)-1。第二个条目是(1-1.43)(1_0.49)(1-0.54)-1 ..依此类推。

我想将此过程应用于列表seperate.mat中的所有矩阵

1 个答案:

答案 0 :(得分:0)

您的数据不可复制,因为您缺少set.seed。但是您可以使用来自Zoo的rollapply遍历结合了apply语句的行。如果我将所有这些都放到函数中,则可以使用lapply调用此函数,并一次性运行所有矩阵。

set.seed(1234) # for reproducibility
mat1 <- matrix(nrow = 2, ncol = (37 + 37), data = rnorm(74, 0, 1))
seperate.mat <- c()
seq1 <- seq (37, 74, 37)
for (i in seq1) {
  seperate.mat[[which(i == seq1)]] = mat1[, (i-36):i]
}

# create period 3 function.
my_period_function <- function(x) {
  t(apply(x, 1, function(x) {
    zoo::rollapply(x, width = 3, function(x) {
      (1+x[1]) * (1+x[2]) * (1+x[3]) - 1  
    }, 
    align  = "right", 
    fill = NA)
    }
    )
  )
  }


lapply(seperate.mat, my_period_function)

[[1]]
     [,1] [,2]      [,3]       [,4]       [,5]       [,6]       [,7]       [,8]       [,9]      [,10]      [,11]      [,12]      [,13]
[1,]   NA   NA -1.616834  0.2668183 -0.7352959 -0.9031650 -0.9490513 -0.7707860 -0.7856123 -0.8439821 -0.9097022 -0.8966906 -0.8056753
[2,]   NA   NA -3.588961 -1.9188394 -0.9249181 -0.9999196 -0.9998111 -0.9984719 -0.9158963 -0.7301124 -0.8455037  1.5392960 -1.3331908
          [,14]      [,15]     [,16]      [,17]     [,18]      [,19]      [,20]      [,21]      [,22]      [,23]     [,24]     [,25]
[1,] -0.7301674 -0.5249856  2.260488 -0.3984036 -1.384278 -0.7843013 -0.4761154 -3.0398455 -0.7499798 -0.9979948 -1.000088 -1.000289
[2,] -0.9845245 -0.9993209 -1.000795 -0.9832478 -1.043840 -0.9714934 -0.9694723 -0.9874984 -1.0263740 -1.0015548 -1.005707 -1.003992
          [,26]      [,27]      [,28]     [,29]     [,30]     [,31]     [,32]     [,33]     [,34]     [,35]      [,36]     [,37]
[1,] -0.9588103 -0.9582071 -0.9264772 -1.241523  4.780042 10.430416  3.166862 0.5868448 -1.132772 -1.320440 -1.3251214 0.4858955
[2,] -1.0529872 -1.0031462 -1.0097738 -1.005300 -1.055905 -1.126936 -1.185025 2.2560412  1.172376  7.788185  0.7231891 0.1995426

[[2]]
     [,1] [,2]      [,3]       [,4]       [,5]       [,6]       [,7]       [,8]       [,9]      [,10]      [,11]      [,12]      [,13]
[1,]   NA   NA -1.616834  0.2668183 -0.7352959 -0.9031650 -0.9490513 -0.7707860 -0.7856123 -0.8439821 -0.9097022 -0.8966906 -0.8056753
[2,]   NA   NA -3.588961 -1.9188394 -0.9249181 -0.9999196 -0.9998111 -0.9984719 -0.9158963 -0.7301124 -0.8455037  1.5392960 -1.3331908
          [,14]      [,15]     [,16]      [,17]     [,18]      [,19]      [,20]      [,21]      [,22]      [,23]     [,24]     [,25]
[1,] -0.7301674 -0.5249856  2.260488 -0.3984036 -1.384278 -0.7843013 -0.4761154 -3.0398455 -0.7499798 -0.9979948 -1.000088 -1.000289
[2,] -0.9845245 -0.9993209 -1.000795 -0.9832478 -1.043840 -0.9714934 -0.9694723 -0.9874984 -1.0263740 -1.0015548 -1.005707 -1.003992
          [,26]      [,27]      [,28]     [,29]     [,30]     [,31]     [,32]     [,33]     [,34]     [,35]      [,36]     [,37]
[1,] -0.9588103 -0.9582071 -0.9264772 -1.241523  4.780042 10.430416  3.166862 0.5868448 -1.132772 -1.320440 -1.3251214 0.4858955
[2,] -1.0529872 -1.0031462 -1.0097738 -1.005300 -1.055905 -1.126936 -1.185025 2.2560412  1.172376  7.788185  0.7231891 0.1995426
相关问题