如何创建由多个对角线组成的数据框?

时间:2018-10-16 23:08:40

标签: r dataframe matrix

我有一个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)]))
}

我知道这行不通,但是我真的不确定如何去做。

1 个答案:

答案 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创建。