2011-09-27 19 views
23

Po skończeniu manipulacji w Dataframe otrzymałem wynikową ramkę danych. Jednak indeks nie został poprawnie wymieniony poniżej.Zmiana numeru indeksu ramki danych

    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 

Chciałbym uzyskać wynik jak poniżej.

    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 

Proszę wskazać, w jaki sposób mogę to uzyskać?

Odpowiedz

35

rownames swojego dataframe, które domyślnie są 1:nrow(dfr). Po zmianie kolejności ramek danych oryginalne rownonimy są również zamieniane ponownie. Aby mieć wiersze nowej kolejności podanej kolejno, wystarczy użyć:

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

Indeks jest w rzeczywistości nazwą rzędu ramek danych. Aby je zmienić, można zrobić coś takiego:

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

lub

rownames(dd) = 1:nrow(dd) 

Osobiście nigdy nie używam rownames.

W tym przykładzie podejrzewam, że nie musisz się o nic martwić, ponieważ zmieniasz nazwę na 1 na n. W szczególności, po podziale ramek danych rownames znów będzie niepoprawny. Na przykład,

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

Myślę, że "długość" podaje liczbę kolumn ramki danych. – James

+0

Tak, bezpieczniej jest używać 'nrow' lub' NROW'. –

+0

Ahh, zostałam przerwana i nie zastanawiałam się nad tym, co piszę. Dzięki – csgillespie

26

Albo po prostu

rownames(df) <- NULL 

daje to, co chcesz.

> 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 
Powiązane problemy