如何使用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