2011-09-27 76 views
23

在完成Dataframe中的一些操作后,我得到了一个结果数据框。但索引没有正确列出如下。更改数据帧的索引号

    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 

我想得到如下结果。

    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 

请指导我如何得到这个?

回答

35

这些都是你的数据框的rownames,它默认是1:nrow(dfr)。当你重新排序数据帧时,原来的rownames也被重新排序。有顺序列出的新秩序的行,只需使用:

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

该索引实际上是数据框的行名称。要改变他们,你可以这样做:

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

rownames(dd) = 1:nrow(dd) 

就个人而言,我从来没有使用rownames。

在你的例子中,我怀疑你不需要担心它们,因为你只是将它们重命名为1n。特别是,当你将你的数据框子集时,rownames将再次不正确。例如,

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

我觉得'length'给出了一个数据帧的列数。 – James

+0

是的,使用'nrow'或'NROW'更安全。 –

+0

啊,我被打断了,没有想通过我写的东西。谢谢 – csgillespie

26

或者,干脆

rownames(df) <- NULL 

给你想要的东西。

> 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