R排序列表

时间:2015-01-27 23:47:35

标签: r sorting

我有一组看起来像这样的数据(earningsCont):

          Total
AUD   -19556.74
BRL        0.00
CAD  -163998.27
CHF   -32616.65
CNY   -45431.39
EUR -1011586.67
GBP -1656961.94
HKD   -10447.83
JPY  -297209.34
PLN   -41066.64
MXN   -24674.11
NZD  -154168.05

当我输入此命令时,我丢失了行名称:

earningsCont[order(earningsCont$Total),]

该命令给了我这个:

 [1] -1656961.94 -1011586.67  -297209.34  -163998.27  -154168.05   -45431.39   -41066.64   -32616.65
 [9]   -24674.11   -19556.74   -10447.83        0.00

我无法弄清楚我在这里做错了什么。我想要的是我开头的同一个列表,但是按“总计”列排序。

1 个答案:

答案 0 :(得分:4)

[.data.drame返回单个列的默认设置是松开' data.frame'类,只是给一个向量。您可以使用第三个参数drop=FALSE(我称之为dat

来阻止这种情况
> dat[order(dat$Total), , drop=FALSE]
          Total
GBP -1656961.94
EUR -1011586.67
JPY  -297209.34
CAD  -163998.27
NZD  -154168.05
CNY   -45431.39
PLN   -41066.64
CHF   -32616.65
MXN   -24674.11
AUD   -19556.74
HKD   -10447.83
BRL        0.00

如果你确实想要带有相关rownames的排序值,那么这将提供:

> setNames( dat[order(dat$Total),], rownames(dat)[order(dat$Total)] )
        GBP         EUR         JPY         CAD         NZD         CNY 
-1656961.94 -1011586.67  -297209.34  -163998.27  -154168.05   -45431.39 
        PLN         CHF         MXN         AUD         HKD         BRL 
  -41066.64   -32616.65   -24674.11   -19556.74   -10447.83        0.00