una por ordenar orden mover matriz funcion filas datos data como columnas columna alfabetico acomodar r dataframe random-forest

por - ¿Cómo puedo usar el atributo row.names para ordenar las filas de mi marco de datos en R?



ordenar un data frame en funcion de una columna (8)

Esto funcionó para mí:

new_df <- df[ order(row.names(df)), ]

Creé un bosque aleatorio y predije las clases de mi conjunto de pruebas, que viven felices en un marco de datos:

row.names class 564028 1 275747 1 601137 0 922930 1 481988 1 ...

El atributo row.names me dice qué fila es cuál, antes de hacer varias operaciones que mezclaron el orden de las filas durante el proceso. Hasta ahora tan bueno.

Ahora me gustaría tener una idea general de la precisión de mis predicciones. Para hacer esto, necesito tomar este marco de datos y reordenarlo en orden ascendente de acuerdo con el atributo row.names . De esta manera, puedo comparar las observaciones, por filas, con las etiquetas, que ya conozco.

Perdóneme por hacer una pregunta tan básica, pero por mi vida, no puedo encontrar una buena fuente de información sobre cómo hacer una tarea tan trivial.

La documentación me implora:

use attr(x, "row.names") si necesita recuperar un conjunto de nombres de fila con valores enteros.

pero esto me deja con nada más que NULL .

Mi pregunta es, ¿cómo puedo usar row.names que me han seguido lealmente en las diversas encarnaciones de los marcos de datos a lo largo de mi flujo de trabajo? ¿No es esto para lo que está ahí?


Esto se hará de forma casi automática ya que la función "[" se mostrará en orden léxico de cualquier vector que pueda coincidir con los nombres conocidos ():

df[ rownames(df) , ]

Podrías haber pensado que sería necesario usar:

df[ order(rownames(df)) , ]

Pero eso te habría dado una ordenación de 1: 100 de 1,10,100, 12,13, ..., 2,20,21, ..., porque el argumento de "[" se convierte en un personaje obligado.


Ninguna de las soluciones realmente funcionaría. Debería ser:

df[ order(as.numeric(row.names(df))),] #umumando que el marco de datos se llama df

porque rowname en R es ''carácter'', cuando falta la parte as.numeric , organiza los datos como 1, 10, 11 ... así sucesivamente.


Por completitud:

La respuesta de @ BondedDust funciona perfectamente para el atributo rownames, pero su ejemplo no usa el atributo rownames. La salida provista en su pregunta indica el uso de una columna llamada "row.names", que no es lo mismo (todos enumerados en el comentario de @ BondedDust). Esta sería la respuesta si desea ordenar por la columna "row.names" en el ejemplo dado en su pregunta (hay otra publicación en esto, que se encuentra here ). Esta respuesta asume que estás usando un marco de datos llamado "df", con una columna llamada "row.names":

ordered.df <- df[order(df$row.names),] #this orders the df by the "row.names" column

Alternativamente, para ordenar por la primera columna (lo mismo si todavía está utilizando su ejemplo):

ordered.df <- df[order(df[,1]),] #this orders the df by the first column

Espero que esto sea de ayuda!


Si solo tiene una columna en su marco de datos, como en mi caso, debe agregar drop = F:

df[ order(rownames(df)) , ,drop=F]


Suponiendo que su marco de datos se llame ''df''you puede crear un nuevo marco de datos ordenado'' ord.df ''que contendrá los nombres de las filas de df, así como sus valores en la siguiente línea de código:

>ord.df<-cbind(rownames(df)[order(rownames(df))], df[order(rownames(df)),])


puedes simplemente ordenar tu df usando esto:

df <- df[sort(rownames(df)),]

y luego haz lo que quieras!


new_df <- df[ order(row.names(df)), ]

o algo similar no funcionará. Después de esta declaración, el new_df no tiene un rowname más. Supongo que una mejor solución es agregar una columna como rowname, ordenarla y establecerla como rowname