如何按行名对矩阵进行排序?

时间:2015-06-24 13:52:20

标签: r

我有一个矩阵(来自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,但无法弄清楚如何做到这一点。

1 个答案:

答案 0 :(得分:3)

我只是想出了如何做到这一点,所以在这里发布答案,因为我觉得它可能对其他用户有用。

首先我将rownames隔离开来:

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

接下来,我订购了rownames:

[1] 8 7 6 5 4 3 2 1

最后,根据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