R 将数据转换为季度报表

R 将数据转换为季度报表,r,matrix,accumulate,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 <- 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]]
然后,新output.matrix的第1行中的第一个条目将是(1+0.43)(1-1.43)(1+0.49)-1。第二个条目是(1-1.43)(1_0.49)(1-0.54)-1。。等等等等


我想对列表中的所有矩阵单独应用此过程。mat

您的数据不可复制,因为您缺少
set.seed
。但是您可以使用zoo中的
rollappy
,结合
apply
语句查看行。如果我把所有这些都放在一个函数中,你就可以用
lappy
调用这个函数,一次遍历所有矩阵

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
set.seed(1234)#用于再现性

mat1您的数据不可复制,因为您缺少
set.seed
。但是您可以使用zoo中的
rollappy
,结合
apply
语句查看行。如果我把所有这些都放在一个函数中,你就可以用
lappy
调用这个函数,一次遍历所有矩阵

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
set.seed(1234)#用于再现性
mat1