【问题标题】:how to sort a matrix by the row names?如何按行名对矩阵进行排序?
【发布时间】:2015-06-24 13:52:19
【问题描述】:

我有一个矩阵(来自 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,但不知道该怎么做。

【问题讨论】:

    标签: r


    【解决方案1】:

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

    首先我隔离了行名:

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

    接下来,我订购了行名:

    [1] 8 7 6 5 4 3 2 1
    

    最后,根据行名的顺序选择矩阵的行:

    > 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
    

    【讨论】:

    • 也许更多 order(as.numeric(row.names(dvdsales))) ?
    • 呼应@CathG,检查order(paste(1:10))
    • 如果年份值都是四个字符长,将它们按字符排序是否有问题?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-03
    • 1970-01-01
    • 1970-01-01
    • 2020-04-14
    相关资源
    最近更新 更多