如何在 R 中刪除每個組的前幾行?


為了刪除 R 中每個組的前幾行,我們可以在使用 group_by 函式進行分組後,使用 dplyr 包的 slice 函式。

例如,如果我們有一個名為 df 的資料框,其中包含一個分組列,例如 Grp,那麼我們可以使用下面給出的命令從每個組中刪除前 2 行:

df%>%group_by(Grp)%>%slice(3:n())

示例 1

以下程式碼片段建立了一個示例資料框:

Group<-sample(c("India","China","UK"),20,replace=TRUE)
Int_Score<-sample(20:50,20)
df1<-data.frame(Group,Int_Score)
df1

輸出

建立了以下資料框:

  Group Int_Score
1  UK     25
2  UK     28
3  India  38
4  China  49
5  China  33
6  India  42
7  India  21
8  UK     46
9  India  20
10 India  43
11 China  37
12 UK     40
13 India  32
14 China  26
15 India  41
16 UK     24
17 UK     48
18 UK     39
19 India  35
20 India  22

要載入 dplyr 包並從 df1 中每個組中刪除前兩行,請將以下程式碼新增到上面的程式碼片段中:

library(dplyr)
df1%>%group_by(Group)%>%slice(3:n())
# A tibble: 14 x 2
# Groups: Group [3]

輸出

如果您將以上所有程式碼作為單個程式執行,它將生成以下輸出:

   Group  Int_Score
   <chr>  <int>
1  China   37
2  China   26
3  India   21
4  India   20
5  India   43
6  India   32
7  India   41
8  India   35
9  India   22
10 UK      46
11 UK      40
12 UK      24
13 UK      48
14 UK      39

示例 2

以下程式碼片段建立了一個示例資料框:

Class<-sample(c("I","II","III"),20,replace=TRUE)
Response<-rpois(20,5)
df2<-data.frame(Class,Response)
df2

輸出

建立了以下資料框:

 Class Response
1   II   1
2    I   7
3  III  10
4    I   3
5  III   3
6   II   2
7    I   6
8  III   3
9   II   5
10   I   6
11   I   4
12 III   3
13  II   4
14 III   1
15 III   4
16 III   8
17 III   8
18 III   4
19 III   4
20   I   6

要從 df2 中每個組中刪除前兩行,請將以下程式碼新增到上面的程式碼片段中:

df2%>%group_by(Class)%>%slice(3:n())
# A tibble: 14 x 2
# Groups: Class [3]

輸出

如果您將以上所有程式碼作為單個程式執行,它將生成以下輸出:

  Class Response
  <chr> <int>
1    I   6
2    I   6
3    I   4
4    I   6
5   II   5
6   II   4
7  III   3
8  III   3
9  III   1
10 III   4
11 III   8
12 III   8
13 III   4
14 III   4

更新於: 2021-11-06

2K+ 次瀏覽

啟動您的 職業生涯

透過完成課程獲得認證

開始
廣告

© . All rights reserved.