我想使用聚合函数,但是根据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
谢谢!
答案 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是列向量的指针列表;这只是重新排序该列表。