2011-08-22 16 views
16

Ho bisogno di modificare/invertire le righe nel mio frame di dati, non trasporre i dati ma spostare la riga in basso verso l'alto e così via. Se il frame di dati era:Modificare l'ordine delle righe in una matrice/dataframe

1 2 3 
4 5 6 
7 8 9 

ho bisogno di convertire in

7 8 9 
4 5 6 
1 2 3 

ho letto di sort() ma io non penso che sia quello che mi serve o che non sono in grado di trovare la via.

risposta

29

probabilmente ci sono modi più eleganti, ma questo funziona:

m <- matrix(1:9, ncol=3, byrow=TRUE) 

# m[rev(seq_len(nrow(m))), ] # Initial answer 
m[nrow(m):1, ] 
    [,1] [,2] [,3] 
[1,] 7 8 9 
[2,] 4 5 6 
[3,] 1 2 3 

Questo funziona perché si sta l'indicizzazione della matrice con una sequenza invertita di interi come l'indice di riga. nrow(m):1 risultati in 3 2 1.

7

avrei invertire le righe un indice che iniziano con il numero di righe, lungo questa linea

revdata <- thedata[dim(thedata)[1L]:1,] 
24

È possibile invertire l'ordine di un data.frame utilizzando il pacchetto dplyr:

iris %>% arrange(-row_number()) 

O senza usare l'operatore di condotte facendo

arrange(iris, -row_number()) 
+1

dovrebbe essere la risposta più popolare imho ... –

+1

o 'iris [ordine (row.names (IRIS) , diminuendo = T),] ' –

+1

@VeerendraGadekar Penso che la tua soluzione sia meno intuitiva perché ha una virgola" orfana ", specifica la tabella di interesse due volte e sta mescolando le parentesi tonde e quadre. So che questa è la sintassi base-r corretta, ma manca un po 'di eleganza nei miei gusti. –

2

Veggie tardi, ma questo sembra funzionare g veloce, non ha bisogno di pacchetti extra ed è semplice:

for(i in 1:ncol(matrix)) {matrix[,i] = rev(matrix[,i])} 

Credo che per un uso frequente, si potrebbe fare una funzione di fuori di esso. Testato con R v = 3.3.1.

3

Siamo in grado di invertire l'ordine di row.names (per data.frame solo):

# create data.frame 
m <- matrix(1:9, ncol=3, byrow=TRUE) 
df_m <- data.frame(m) 

#reverse 
df_m[rev(rownames(df_m)), ] 

# X1 X2 X3 
# 3 7 8 9 
# 2 4 5 6 
# 1 1 2 3 
Problemi correlati