在R中的aggregate()函数中,有没有一种方法可以对多个列的输出进行排序?

在R中的aggregate()函数中,有没有一种方法可以对多个列的输出进行排序?,r,aggregate,R,Aggregate,我想使用聚合函数,但是要根据两列(第一列,然后是另一列的子集)对输出进行排序(从最小到最大) 以下是一个例子: 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

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

以下是一个例子:

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    1 2003     104
2    1 2004     105
3    2 2001     102
4    3 2002     103
5    4 2005     101

谢谢

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

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

a0在生成随机数据之前,请使用
set.seed
(就像您对
sample
所做的那样)。我相信您知道,在
aggregate
中切换两个变量的顺序会按照您的意愿排序。如果您希望列按特定顺序排列,那么很容易在末尾对它们进行重新排序:
aggregate(biometry~year+plot,data=test,FUN='sum')[,c(2,1,3)]
。然而,我需要在一个数据集上使用这个方法,这个数据集有50多个图,每个图都有80年的历史,所以这个方法对于那个用途来说并不实用。谢谢。为什么以后你不能对数据进行排序呢?我可以。但我也把它放到一个循环中,对100种不同的物种进行分析,我不希望这个循环比实际情况更复杂。如果有一种方法可以简单地将多个列的排序合并到聚合中,那么我就可以真正减少代码的长度。谢谢。@森林生态学家如果有一些复杂的因素使得这不可行,那么应该在原始问题中更清楚地说明这个因素。“为100人做这件事”太模糊了。也许可以使用
setorder(setDT(a0),plot,year)
?@davidernburg当然可以,但为什么我们只是将参数的顺序更改为
aggregate
就可以进行事后排序呢?OP对data.tables不感兴趣,但这种方法也可以用data.frames来实现,比如
a0[with(a0,order(plot,year)),]
之类的。我认为,你的方法是不同的,应该有一个单独的答案。
# switch from
a0 <- aggregate(biomass~plot+year,data=test,FUN='sum')
# to
a  <- aggregate(biomass~year+plot,data=test,FUN='sum')