我有一个60 x 120的矩阵,基本上是2 60 x 60的矩阵,我想创建一个由相应矩阵的两个对角线组成的数据帧。我知道我可以拆分矩阵,但是稍后我将使用60 x 60000矩阵。我该怎么做呢?
以下是我到目前为止的尝试:
MatrixFemale <- as.matrix(MortalityFemale)
b <- seq(1,1000) * 60
c <- c(1, b) - 1
for (x in c) {
Data <- data.frame(diag(MatrixFemale[, -(1:x)]))
}
我知道这行不通,但是我真的不确定如何去做。
答案 0 :(得分:0)
这是一种方法。基本上,我们可以获取列表中每个子矩阵的列索引,然后将各个子矩阵提取到列表中,最后获得每个子矩阵的对角线并绑定到数据帧中。 (您甚至可以结合最后两个步骤,但是我认为这更清楚了)
set.seed(123)
library(tidyverse)
mat <- cbind(diag(60), diag(60) + 1) # Example 60 x 120 matrix with diagonals 1 and 2
split(1:ncol(mat), rep(1:(ncol(mat) / 60), each = 60)) %>% # Get column indexes for submatrices
map(~ mat[, .]) %>% # List of the 60 x 60 submatrices
map_dfc(diag) # Get diagonal of each submatrix and bind into data frame columns
#> # A tibble: 60 x 2
#> `1` `2`
#> <dbl> <dbl>
#> 1 1 2
#> 2 1 2
#> 3 1 2
#> 4 1 2
#> 5 1 2
#> 6 1 2
#> 7 1 2
#> 8 1 2
#> 9 1 2
#> 10 1 2
#> # ... with 50 more rows
由reprex package(v0.2.0)于2018-10-16创建。