如何在 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
广告