如何在 R 数据框中按组删除仅第一行重复行?


要按组删除仅第一行重复行,我们可以使用 dplyr 包的 filter 函数和 duplicated 函数。

例如,如果我们有一个名为 df 的数据框,其中包含一个分组列,例如 Grp,则可以通过使用以下命令按组删除仅第一行重复行:

df%>%group_by(Grp)%>%filter(duplicated(Grp)|n()==1)

示例 1

以下代码片段创建了一个示例数据框:

Group<-sample(LETTERS[1:4],20,replace=TRUE)
Response<-rpois(20,5)
df1<-data.frame(Group,Response)
df1

输出

创建了以下数据框:

 Group Response
1  D   9
2  A   3
3  B   4
4  A   5
5  B   8
6  B   8
7  D   2
8  D   5
9  B   4
10 C   4
11 D   7
12 D   5
13 C   5
14 A   2
15 B   5
16 A   9
17 B   6
18 C   8
19 D   3
20 A   7

要加载 dplyr 包并从 df1 中每个组中删除仅第一行重复行,请将以下代码添加到上述代码片段中:

library(dplyr)
df1%>%group_by(Group)%>%filter(duplicated(Group)|n()==1)
# A tibble: 16 x 2
# Groups: Group [4]

输出

如果您将以上所有代码作为单个程序执行,它将生成以下输出:

 Group Response
 <chr> <int>
1  A    5
2  B    8
3  B    8
4  D    2
5  D    5
6  B    4
7  D    7
8  D    5
9  C    5
10 A    2
11 B    5
12 A    9
13 B    6
14 C    8
15 D    3
16 A    7

示例 2

以下代码片段创建了一个示例数据框:

Category<-sample(c("First","Second","Third"),20,replace=TRUE)
Rank<-sample(1:10,20,replace=TRUE)
df2<-data.frame(Category,Rank)
df2

输出

创建了以下数据框:

 Category Rank
1  Second  10
2  Second   5
3  Second   4
4  Third    3
5  Second   5
6  Second   9
7  First    6
8  Second  10
9  First    9
10 Third    1
11 First    8
12 Second   3
13 Second   5
14 Third    1
15 Third    2
16 Second   4
17 Second   6
18 Third    6
19 Second   2
20 Second   9

要从 df2 中每个组中删除仅第一行重复行,请将以下代码添加到上述代码片段中:

df2%>%group_by(Category)%>%filter(duplicated(Category)|n()==1)
# A tibble: 17 x 2
# Groups: Category [3]

输出

如果您将以上所有代码作为单个程序执行,它将生成以下输出:

  Category Rank
  <chr>    <int>
1  Second   5
2  Second   4
3  Second   5
4  Second   9
5  Second  10
6  First    9
7  Third    1
8  First    8
9  Second   3
10 Second   5
11 Third    1
12 Third    2
13 Second   4
14 Second   6
15 Third    6
16 Second   2
17 Second   9

更新于: 2021-11-06

1K+ 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告