2015-06-24 72 views
0

我有一個矩陣(從UsingR庫):如何按行名排序矩陣?

> dvdsales 
     JAN FEB  MAR  APR  MAY  JUN JUL  AUG  SEP  OCT  NOV  DEC 
2004 1111285 919295 1545112 1161857 1219838  NA  NA  NA  NA  NA  NA  NA 
2003 797058 743488 1613649 1272337 1332897 2100432 999508 1436878 2496497 2491871 3682691 3027083 
2002 542698 736118 1404026 1095930 950412 1632032 966129 884288 2299864 1704148 2544130 2330048 
2001 572031 555856 1207489 631353 523225 920839 693013 673926 1768821 1516211 1781048 1862772 
2000 370031 401035 412559 409192 453435 654687 537453 557617 1296280 1236658 866507 1303091 
1999 125536 109399 123466 269107 279756 326668 325151 260225 501501 603048 449242 646290 
1998 34027 34236 38336 42889 47805 79044 84709 81170 113558 163074 136908 233505 
1997  NA  NA  NA 34601 27051 29037 19416 34021 34371 56407 37657 42575 

我想,這樣的歲月是在上升的行由行名稱進行排序,而不是按降序排列,如

> dvdsales 
     JAN FEB  MAR  APR  MAY  JUN JUL  AUG  SEP  OCT  NOV  DEC 
1997  NA  NA  NA 34601 27051 29037 19416 34021 34371 56407 37657 42575 
1998 34027 34236 38336 42889 47805 79044 84709 81170 113558 163074 136908 233505 
... 

我該怎麼在R中做到這一點?我看過?order,但無法弄清楚如何做到這一點。

回答

3

我剛想出如何做到這一點,所以張貼答案在這裏,因爲我認爲它可能對其他用戶有用。

首先我分離rownames:根據rownames的順序

[1] 8 7 6 5 4 3 2 1 

最後,選擇矩陣的行:

> rownames(dvdsales) 
[1] "2004" "2003" "2002" "2001" "2000" "1999" "1998" "1997" 

接着,我下令rownames

> dvdsales [ order(rownames(dvdsales)), ] 
     JAN FEB  MAR  APR  MAY  JUN JUL  AUG  SEP  OCT  NOV  DEC 
1997  NA  NA  NA 34601 27051 29037 19416 34021 34371 56407 37657 42575 
1998 34027 34236 38336 42889 47805 79044 84709 81170 113558 163074 136908 233505 
1999 125536 109399 123466 269107 279756 326668 325151 260225 501501 603048 449242 646290 
2000 370031 401035 412559 409192 453435 654687 537453 557617 1296280 1236658 866507 1303091 
2001 572031 555856 1207489 631353 523225 920839 693013 673926 1768821 1516211 1781048 1862772 
2002 542698 736118 1404026 1095930 950412 1632032 966129 884288 2299864 1704148 2544130 2330048 
2003 797058 743488 1613649 1272337 1332897 2100432 999508 1436878 2496497 2491871 3682691 3027083 
2004 1111285 919295 1545112 1161857 1219838  NA  NA  NA  NA  NA  NA  NA 
+2

也許更多的順序(as.numeric(row.names(dvdsales)))'? – Cath

+4

迴應@CathG,檢查'訂單(粘貼(1:10))' – akrun

+2

如果年份值全部爲四個字符,那麼將它們排序爲字符會出現問題嗎? –