2012-08-27 32 views
5

que tienen los siguientes datos en una trama de datos:reordenar columnas basadas en valores en una fila particular.

aa bb cc 
1 3 4 5 
2 5 4 3 
3 7 8 6 
.. 
100 33 63 55 

tengo que cambiar el orden de las columnas en base a los valores de la última fila. El resultado de esta transformación sería:

bb cc aa 
1 4 5 3 
2 4 3 5 
3 8 6 7 
... 
100 63 55 33 

Respuesta

6
x <- structure(list(aa = c(3L, 5L, 7L, 33L), bb = c(4L, 4L, 8L, 63L), 
    cc = c(5L, 3L, 6L, 55L)), .Names = c("aa", "bb", "cc"), 
    class = "data.frame", row.names = c("1", "2", "3", "100")) 
x[,order(-x[nrow(x),])] 
+0

Gracias, ¿puede explicar lo que -x [nrow ...] está haciendo – learner

+3

'x [nrow (x),]' devuelve la última fila ... '-x [nrow (x),]' es al contrario, por lo que ordena en el orden que desee. Podría haber usado 'x [, order (x [nrow (x),], decreasing = TRUE)]' en su lugar, pero prefiero menos tipeo. :) –

1

Sobre la base de la respuesta de Joshua Ulrich, en caso de que desee ordenar por el nombre fila, en lugar de número:

x[, order(-x[which(rownames(x) == '100'), ]) ] 

donde 100 es el nombre de la fila, como en el ejemplo anterior.

Cuestiones relacionadas