如何以更智能的方式从矩阵中删除特定的行和列?

psi*_*siu 38 r

我们说t1是:

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    1   11    1    11
 [2,]    2   12    2   12    2   12    2   12    2    12
 [3,]    3   13    3   13    3   13    3   13    3    13
 [4,]    4   14    4   14    4   14    4   14    4    14
 [5,]    5   15    5   15    5   15    5   15    5    15
 [6,]    6   16    6   16    6   16    6   16    6    16
 [7,]    7   17    7   17    7   17    7   17    7    17
 [8,]    8   18    8   18    8   18    8   18    8    18
 [9,]    9   19    9   19    9   19    9   19    9    19
[10,]   10   20   10   20   10   20   10   20   10    20
Run Code Online (Sandbox Code Playgroud)

我想从这个矩阵中删除第4-6行和第7-9行.

我知道如何逐个删除它

t2 <- t1[,-7]
t3 <- t2[,-8]
t4 <- t3[,-9]
t5 <- t4[-4,]
t6 <- t5[-5,]
t7 <- t6[-6,]
Run Code Online (Sandbox Code Playgroud)

但是,我认为这是最愚蠢的做法.您能介意一些更聪明的方法吗?

tca*_*h21 60

你可以做:

t1<- t1[-4:-6,-7:-9]
Run Code Online (Sandbox Code Playgroud)

  • +1替代语法:`t1 < - t1 [ - (4:6), - (7:9)]` (24认同)
  • @ tcash21我如何按名称删除行或列,但在矩阵中? (2认同)

Chi*_*and 6

您可以使用

t1<- t1[-4:-6,-7:-9]  
Run Code Online (Sandbox Code Playgroud)

要么

t1 <- t1[-(4:6), -(7:9)]
Run Code Online (Sandbox Code Playgroud)

要么

t1 <- t1[-c(4, 5, 6), -c(7, 8, 9)]
Run Code Online (Sandbox Code Playgroud)

您可以传递vectors选择rows/columns要删除.如果您尝试删除连续的行/列,前两个方法很有用.如果您尝试删除离散, 则第三种方法很有用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
Run Code Online (Sandbox Code Playgroud)