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

更新於:2020年8月10日

404 次瀏覽

啟動你的職業生涯

完成課程獲得認證

開始學習
廣告