如何在 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+ 次浏览

启动您的 职业生涯

通过完成课程获得认证

开始
广告