2010-05-07 13 views
18
test1 <- as.matrix(c(1, 2, 3, 4, 5)) 
row.names(test1) <- c("a", "d", "c", "b", "e") 

test2 <- as.matrix(c(6, 7, 8, 9, 10)) 
row.names(test2) <- c("e", "d", "c", "b", "a") 

    test1 
    [,1] 
a 1 
d 2 
c 3 
b 4 
e 5 

test2 
    [,1] 
e 6 
d 7 
c 8 
b 9 
a 10 

Come posso riordinare test2 modo che le righe sono nello stesso ordine come test1? es:R: Come è possibile riordinare le righe di una matrice, data.frame o vettore secondo un'altra

test2 
    [,1] 
a 10 
d 7 
c 8 
b 9 
e 6 

Ho provato ad utilizzare la funzione di riordino con: riordino (test1, test2) ma non ho potuto capire la sintassi corretta. Vedo che riordino prende un vettore e io sto usando una matrice. I miei dati reali hanno un vettore di caratteri e un altro come data.frame. Ho pensato che la struttura dei dati non sarebbe stata troppo importante per questo esempio sopra, ho solo bisogno di aiuto con la sintassi e posso adattarla al mio vero problema.

risposta

19
test2 <- test2[rownames(test1),,drop=FALSE] 
+0

Perché questa non funziona per i miei dati? Voglio fare test2 [match (test2 $ column, test1 $ column), 1, drop = FALSE] perché quello che sto cercando è i valori delle colonne non i row.names – chimpsarehungry

6

Dopo aver sistemato il codice snipped per generare in realtà ciò che il vostro esempio spettacoli (suggerimento: test1 avevano nomi a, b, c, d, e, si intende a, d, C, B, 1 come si vede ora), questo è stato più facile grazie a match():

R> test2[match(row.names(test2), row.names(test1)),1,drop=FALSE] 
    [,1] 
a 10 
d 7 
c 8 
b 9 
e 6 
R> 

Essi chiave qui è che match() fa ciò che si vuole:

R> match(row.names(test2), row.names(test1)) 
[1] 5 2 3 4 1 
+0

Perché questo non funziona per i miei dati? Voglio fare 'test2 [match (test2 $ column, test1 $ column), 1, drop = FALSE]' perché quello di cui sto facendo la corrispondenza sono i valori delle colonne non i nomi row.names – chimpsarehungry

Problemi correlati