如何使用dplyr在R数据帧中为每个组创建最大值的数据帧?
有时在进行数据分析时需要按组最大值的子集,并且该数据帧的此子集用于比较分析。主要目的是将这些最大值相互比较或与阈值进行比较。在R中,我们可以通过使用dplyr包中的group_by和slice函数来找到按组的最大值。
示例
请看以下数据帧-
> x<-rep(c("S1","S2","S3","S4"),times=c(6,12,12,10)) > y<-1:40 > df<-data.frame(x,y) > head(df,20) x y 1 S1 1 2 S1 2 3 S1 3 4 S1 4 5 S1 5 6 S1 6 7 S2 7 8 S2 8 9 S2 9 10 S2 10 11 S2 11 12 S2 12 13 S2 13 14 S2 14 15 S2 15 16 S2 16 17 S2 17 18 S2 18 19 S3 19 20 S3 20
加载dplyr软件包-
> library(dplyr)
使用group_by和slice查找最大值的数据帧-
> Group_Maximum_df<-df%>%group_by(x)%>%slice(which.max(y)) > Group_Maximum_df # A tibble: 4 x 2 # Groups: x [4] x y <fct> <int> 1 S1 6 2 S2 18 3 S3 30 4 S4 40
在上面的示例中,我们有一个因子变量。现在让我们考虑,我们的组变量不是整数变量,而是用整数值表示的。同样在这种情况下,查找最大值的数据帧的过程将相同-
> a<-rep(c(1,2,3,4,5),times=c(5,10,10,5,10)) > b<-rep(c(25,23,21,24),times=c(10,10,10,10)) > df2<-data.frame(a,b) > head(df2,20) a b 1 1 25 2 1 25 3 1 25 4 1 25 5 1 25 6 2 25 7 2 25 8 2 25 9 2 25 10 2 25 11 2 23 12 2 23 13 2 23 14 2 23 15 2 23 16 3 23 17 3 23 18 3 23 19 3 23 20 3 23 > Group_Maximum_df2<-df2%>%group_by(a)%>%slice(which.max(b)) > Group_Maximum_df2 # A tibble: 5 x 2 # Groups: a [5] a b <dbl> <dbl> 1 1 25 2 2 25 3 3 23 4 4 21 5 5 24