按R中的特定列对聚合输出进行排序

时间:2015-08-04 09:12:59

标签: r sorting aggregate

我正在尝试对传递多个函数的聚合函数的输出进行排序,因为我想显示每个配对的均值和计数。

我调用如下(使用内置数据集Loblolly作为示例):

> LobHeigh <- aggregate(Loblolly$height, by=list(Loblolly$Seed,     
Loblolly$age),FUN=function(x) c(mn=mean(x), n=length(x)))
> head(LobHeigh)

  Group.1 Group.2 x.mn  x.n
1     329       3 3.93 1.00
2     327       3 4.12 1.00
3     325       3 4.38 1.00
4     307       3 3.91 1.00
5     331       3 3.46 1.00
6     311       3 3.88 1.00

我希望这个输出看起来如下(无论哪种方式,小数位数都很好):

Group.1 Group.2     x.mn    x.n
    325       3     4.38      1
    327       3     4.12      1
    329       3     3.93      1
    307       3     3.91      1
    311       3     3.88      1
    331       3     3.46      1

我试图按如下方式对聚合调用进行排序,但这并没有奏效:

LobHeigh <- aggregate(Loblolly$height, by=list(Loblolly$Seed,     
Loblolly$age),FUN=function(x) c(mn=sort(mean(x)), n=length(x)))

我还尝试在函数调用之后对LobHeigh进行排序,如下所示,因为我知道如果我只是自己聚合平均值,这是有效的:

> LobHeigh <- aggregate(Loblolly$height, by=list(Loblolly$Seed,     
Loblolly$age),FUN=function(x) c(mn=mean(x), n=length(x)))
> LobHeigh[order(LobHeigh$x),]

我知道类(LobHeigh $ x)显示x是一个矩阵,但我无法弄清楚如何访问x.mn以使用它进行排序。

有办法做到这一点吗?

1 个答案:

答案 0 :(得分:2)

您可以通过双重索引LobHeigh[,3][,1]来访问该列。

LobHeigh[sort(LobHeigh[,3][,1], TRUE),]

那就是说,你可能最好把它变成一个更传统的矩阵。

cbind(LobHeigh[,1:2], LobHeigh[,3])

并从那里开始使用它。