Extracting off-diagonal slice of large matrix

后端 未结 3 1682
野性不改
野性不改 2020-12-09 05:09

I\'ve got a large nxn matrix and would like to take off-diagonal slices of varying sizes. For example:

1 2 3 4 5 6
1 2 3 4 5 6
1 2 3 4 5 6
1 2 3 4 5 6
1 2 3          


        
3条回答
  •  时光取名叫无心
    2020-12-09 05:40

    you can do:

    matrix:

    m<-
    matrix(1:6,ncol = 6, nrow=6 ,byrow = T)
    

    function:

    n_diag <- function (x, n) {
        d <- dim(x)
        ndiag <- .row(d) - n >= .col(d)
        x[upper.tri(x) | ndiag] <- NA
        return(x)
    }
    

    call:

    n_diag(m,3)
    
    #     [,1] [,2] [,3] [,4] [,5] [,6]
    #[1,]    1   NA   NA   NA   NA   NA
    #[2,]    1    2   NA   NA   NA   NA
    #[3,]    1    2    3   NA   NA   NA
    #[4,]   NA    2    3    4   NA   NA
    #[5,]   NA   NA    3    4    5   NA
    #[6,]   NA   NA   NA    4    5    6
    

    just for fun:

    #lapply(1:6, n_diag, x = m)
    

提交回复
热议问题