2011-08-22 27 views
16

Necesito cambiar/invertir filas en mi marco de datos, no transponiendo los datos, sino moviendo la fila inferior a la parte superior, y así sucesivamente. Si la trama de datos fue:Cambiar el orden de las filas en una matriz/dataframe

1 2 3 
4 5 6 
7 8 9 

Necesito convertir a

7 8 9 
4 5 6 
1 2 3 

He leído sobre sort() pero yo no creo que es lo que necesito o no soy capaz de encontrar la manera.

Respuesta

29

probablemente hay formas más elegantes, pero esto funciona:

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 

Esto funciona porque se está indexando la matriz con una secuencia invertida de números enteros como el índice de la fila. nrow(m):1 resultados en 3 2 1.

7

Me revertir las filas de un índice que comienzan con el número de filas, a lo largo de esta línea

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

Puede invertir el orden de un hoja.de.datos utilizando el paquete de dplyr:

iris %>% arrange(-row_number()) 

O sin utilizar el operador de tubería haciendo

arrange(iris, -row_number()) 
+1

debería ser la respuesta más popular en mi humilde opinión ... –

+1

o 'iris [orden (row.names (iris) , decreciente = T),] ' –

+1

@VeerendraGadekar Creo que su solución es menos intuitiva porque tiene una coma" huérfana ", especifica dos veces la tabla de intereses y mezcla los corchetes redondos y cuadrados. Sé que esta es la sintaxis correcta de base-r, pero carece de elegancia en mi gusto. –

2

Veeery tarde, pero esto parece estar funcionando g rápido, no necesita ningún paquete adicional y es simple:

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

supongo que para un uso frecuente, se podría hacer una función de ella. Probado con R v = 3.3.1.

3

Podemos invertir el orden de row.names (por hoja.de.datos solamente):

# 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 
Cuestiones relacionadas