2012-10-16 29 views
32

Diciamo t1 è:Come eliminare righe e colonne specifiche da una matrice in modo più intelligente?

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 

voglio eliminare la riga e la colonna 4-6 7-9 da questa matrice.

so come rimuovere uno per uno usando

t2 <- t1[,-7] 
t3 <- t2[,-8] 
t4 <- t3[,-9] 
t5 <- t4[-4,] 
t6 <- t5[-5,] 
t7 <- t6[-6,] 

Tuttavia, credo che sia il modo più stupido di farlo. Potresti pensare ad alcuni modi più intelligenti di farlo?

risposta

50

Si può fare:

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

+1 alternativa sintassi: 't1 <- t1 [- (4: 6), - (7: 9)]' –

+0

hah, è entrato per pubblicare lo stesso! – Maiasaura

+0

Grazie mille! – psiu

6

È possibile utilizzare

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

o

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

o

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

È possibile passare vectors per selezionare rows/columns da eliminare. I primi due metodi sono utili se si tenta di eliminare continue righe/colonne. Il terzo metodo è utile se si sta tentando di eliminare discretorows/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 
1
> 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 

``

semplicemente utilizzando il COMAND S < - S [2] si rimuove la seconda colonna. Analogamente per cancellare una riga eliminare seconda fila S < - S [-2,]

Problemi correlati