How to delete specific rows and columns from a matrix in a smarter way?

前端 未结 4 1227
花落未央
花落未央 2021-02-05 00:45

Let\'s say t1 is :

t1 <- array(1:20, dim=c(10,10))

      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
 [1,]    1   11    1   11    1   11          


        
相关标签:
4条回答
  • 2021-02-05 01:25

    You can use

    t1<- t1[-4:-6,-7:-9]  
    

    or

    t1 <- t1[-(4:6), -(7:9)]
    

    or

    t1 <- t1[-c(4, 5, 6), -c(7, 8, 9)]
    

    You can pass vectors to select rows/columns to be deleted. First two methods are useful if you are trying to delete contiguous rows/columns. Third method is useful if You are trying to delete discrete rows/columns.

    > t1 <- array(1:20, dim=c(10,10));
    
    > t1[-c(1, 4, 6, 7, 9), -c(2, 3, 8, 9)]
    
         [,1] [,2] [,3] [,4] [,5] [,6]
    [1,]    2   12    2   12    2   12
    [2,]    3   13    3   13    3   13
    [3,]    5   15    5   15    5   15
    [4,]    8   18    8   18    8   18
    [5,]   10   20   10   20   10   20
    
    0 讨论(0)
  • 2021-02-05 01:28
    > S = matrix(c(1,2,3,4,5,2,1,2,3,4,3,2,1,2,3,4,3,2,1,2,5,4,3,2,1),ncol = 5,byrow = TRUE);S
    [,1] [,2] [,3] [,4] [,5]
    [1,]    1    2    3    4    5
    [2,]    2    1    2    3    4
    [3,]    3    2    1    2    3
    [4,]    4    3    2    1    2
    [5,]    5    4    3    2    1
    > S<-S[,-2]
    > S
    [,1] [,2] [,3] [,4]
    [1,]    1    3    4    5
    [2,]    2    2    3    4
    [3,]    3    1    2    3
    [4,]    4    2    1    2
    [5,]    5    3    2    1
    

    Just use the command S <- S[,-2] to remove the second column. Similarly to delete a row, for example, to delete the second row use S <- S[-2,].

    0 讨论(0)
  • 2021-02-05 01:28

    You can also remove rows and columns by feeding a vector of logical boolean values to the matrix. This handles the situation where you have multiple non-contiguous rows or non-contiguous columns that need to be deleted.

    # TRUE = Keep a row/column
    # FALSE = Delete a row/column
    #
    # FALSE for rows 4, 5, and 6
    # Row:            1     2     3     4      5      6      7     8     9     10
    rows_to_keep <- c(TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE)
        
    # FALSE for columns 7, 8, and 9
    # Column:         1     2     3     4     5     6     7      8      9      10
    cols_to_keep <- c(TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, TRUE) 
    

    To remove just the rows:

    t1 <- t1[rows_to_keep,]
    

    To remove just the columns:

    t1 <- t1[,cols_to_keep]
    

    To remove both the rows and columns:

    t1 <- t1[rows_to_keep, cols_to_keep]
    

    This coding technique is useful if you don't know in advance what rows or columns you need to remove. The rows_to_keep and cols_to_keep vectors can be calculated as appropriate by your code.

    0 讨论(0)
  • 2021-02-05 01:43

    You can do:

    t1<- t1[-4:-6,-7:-9]
    
    0 讨论(0)
提交回复
热议问题