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