2011-09-27 10 views
23

Después de terminar con alguna manipulación en Dataframe, obtuve un dataframe de resultados. Pero el índice no se enumera correctamente como a continuación.Cambiar el número de índice de un marco de datos

    MsgType/Cxr NoOfMsgs AvgElpsdTime(ms) 
    161     AM  86   30.13 
    171     CM  1    104 
    18     CO  27   1244.81 
    19     US  23   1369.61 
    20     VK  2    245 
    21     VS  11   1273.82 
    112     fqa  78   1752.22 
    24     SN  78   1752.22 

Me gustaría obtener el resultado como a continuación.

    MsgType/Cxr NoOfMsgs AvgElpsdTime(ms) 
    1     AM  86   30.13 
    2     CM   1    104 
    3     CO  27   1244.81 
    4     US  23   1369.61 
    5     VK  2    245 
    6     VS  11   1273.82 
    7     fqa  78   1752.22 
    8     SN  78   1752.22 

¿Cómo puedo obtener esto?

Respuesta

35

Estos son los rownames de la trama de datos, que por defecto son 1:nrow(dfr). Cuando reordenó el marco de datos, los nombres de las filas originales también se reordenaron. Para tener las filas de la nueva orden que se indica de forma secuencial, sólo tiene que utilizar:

rownames(dfr) <- 1:nrow(dfr) 
3

El índice es realmente el nombre de la fila del marco de datos. Para cambiarlos, puede hacer algo como:

rownames(dd) = 1:dim(dd)[1] 

o

rownames(dd) = 1:nrow(dd) 

Personalmente, nunca utilice rownames.

En su ejemplo, sospecho que tampoco tiene que preocuparse por ellos, ya que los está cambiando de nombre 1 a n. En particular, cuando subconjunta su marco de datos, los nombres de las filas nuevamente serán incorrectos. Por ejemplo,

##Simple data frame 
R> dd = data.frame(a = rnorm(6)) 
R> dd$type = c("A", "B") 
R> rownames(dd) = 1:nrow(dd) 
R> dd 
     a type 
1 2.1434 A 
2 -1.1067 B 
3 0.7451 A 
4 -0.1711 B 
5 1.4348 A 
6 -1.3777 B 

##Basic subsetting 
R> dd_sub = dd[dd$type=="A",] 
##Rownames are "wrong" 
R> dd_sub 
     a type 
1 2.1434 A 
3 0.7451 A 
5 1.4348 A 
+1

Creo 'length' da la cantidad de columnas de un marco de datos. – James

+0

Sí, es más seguro usar 'nrow' o' NROW'. –

+0

Ahh, me interrumpieron y no pensé en lo que estaba escribiendo. Gracias – csgillespie

26

O, simplemente

rownames(df) <- NULL 

da lo que quiere.

> d <- data.frame(x = LETTERS[1:5], y = letters[1:5])[sample(5, 5), ] 
> d 
    x y 
5 E e 
4 D d 
3 C c 
2 B b 
1 A a 
> rownames(d) <- NULL 
> d 
    x y 
1 E e 
2 D d 
3 C c 
4 B b 
5 A a 
Cuestiones relacionadas