当我们使用聚合函数查找最大值或任何其他值时,聚合的输出不会提供对应于最大值的所有列。因此,我们需要将通过使用聚合获得的数据帧与原始数据帧合并。这样,我们将仅获得在新数据框和原始数据框之间共有的那些行。
请看以下数据帧-
set.seed(99) x1<-rep(c(1,2,3,4,5),times=4) x2<-sample(1:100,20) x3<-rep(1:10,2) x4<-rep(c("C1","C2","C3","C4"),each=5) x5<-sample(1:10,20,replace=TRUE) x6<-sample(1:1000,20,replace=TRUE) df<-data.frame(x1,x2,x3,x4,x5,x6) df
输出结果
x1 x2 x3 x4 x5 x6 1 1 48 1 C1 1 123 2 2 33 2 C1 7 285 3 3 44 3 C1 2 301 4 4 22 4 C1 7 268 5 5 62 5 C1 6 713 6 1 32 6 C2 5 867 7 2 13 7 C2 8 509 8 3 20 8 C2 7 616 9 4 31 9 C2 10 308 10 5 68 10 C2 6 755 11 1 9 1 C3 5 806 12 2 82 2 C3 10 315 13 3 88 3 C3 1 552 14 4 30 4 C3 6 103 15 5 86 5 C3 6 419 16 1 84 6 C4 7 395 17 2 95 7 C4 4 422 18 3 14 8 C4 5 818 19 4 4 9 C4 7 68 20 5 78 10 C4 1 879
聚合示例以获取最大值并获取所有列名-
merge(aggregate(x2~x4,df,FUN=max),df) x4 x2 x1 x3 x5 x6 1 C1 62 5 5 6 713 2 C2 68 5 10 6 755 3 C3 88 3 3 1 552 4 C4 95 2 7 4 422 merge(aggregate(x2~x1,df,FUN=max),df) x1 x2 x3 x4 x5 x6 1 1 84 6 C4 7 395 2 2 95 7 C4 4 422 3 3 88 3 C3 1 552 4 4 31 9 C2 10 308 5 5 86 5 C3 6 419 merge(aggregate(x2~x3,df,FUN=max),df) x3 x2 x1 x4 x5 x6 1 1 48 1 C1 1 123 2 10 78 5 C4 1 879 3 2 82 2 C3 10 315 4 3 88 3 C3 1 552 5 4 30 4 C3 6 103 6 5 86 5 C3 6 419 7 6 84 1 C4 7 395 8 7 95 2 C4 4 422 9 8 20 3 C2 7 616 10 9 31 4 C2 10 308 merge(aggregate(x5~x4,df,FUN=max),df) x4 x5 x1 x2 x3 x6 1 C1 7 4 22 4 268 2 C1 7 2 33 2 285 3 C2 10 4 31 9 308 4 C3 10 2 82 2 315 5 C4 7 4 4 9 68 6 C4 7 1 84 6 395 merge(aggregate(x5~x1,df,FUN=max),df) x1 x5 x2 x3 x4 x6 1 1 7 84 6 C4 395 2 2 10 82 2 C3 315 3 3 7 20 8 C2 616 4 4 10 31 9 C2 308 5 5 6 62 5 C1 713 6 5 6 68 10 C2 755 7 5 6 86 5 C3 419 merge(aggregate(x6~x4,df,FUN=max),df) x4 x6 x1 x2 x3 x5 1 C1 713 5 62 5 6 2 C2 867 1 32 6 5 3 C3 806 1 9 1 5 4 C4 879 5 78 10 1