有没有办法在R的aggregate()函数中按多列排序输出?

时间:2015-02-18 20:53:41

标签: r aggregate

我想使用聚合函数,但是根据2列(第一个,然后是另一个子集)对输出进行排序(从最小到最大)。

以下是一个例子:

test<-data.frame(c(sample(1:4),1),sample(2001:2005),11:15,c(letters[1:4],'a'),sample(101:105))
names(test)<-c("plot","year","age","spec","biomass")
test
  plot year age spec biomass
1    2 2001  11    a     102
2    4 2005  12    b     101
3    1 2004  13    c     105
4    3 2002  14    d     103
5    1 2003  15    a     104

aggregate(biomass~plot+year,data=test,FUN='sum')

这会创建仅从年份到最大订购年份的输出。

  plot year biomass
1    2 2001     102
2    3 2002     103
3    1 2003     104
4    1 2004     105
5    4 2005     101

但是我希望按照情节和那一年订购输出。

  plot year biomass
1    1 2003     104
2    1 2004     105
3    2 2001     102
4    3 2002     103
5    4 2005     101

谢谢!

1 个答案:

答案 0 :(得分:0)

aggregate函数 按列排序。切换参数的顺序以获得所需的排序:

# switch from
a0 <- aggregate(biomass~plot+year,data=test,FUN='sum')
# to
a  <- aggregate(biomass~year+plot,data=test,FUN='sum')

数据按问题中描述的方式排序。无需进一步分类。


如果您想更改列的显示顺序以与您想要的输出完全匹配,请尝试a[,c(1,3,2)]。这种重新排序在计算上并不昂贵。我的理解是data.frame是列向量的指针列表;这只是重新排序该列表。