仅保留具有最大元素组的数据框中的条目

问题描述 投票:0回答:1

我有这个精确的数据框,只是长一点:

mydf <- data.frame(ids=c('D3022TexB4//D3022TexB7','D3022TexC10//D3026TexC1','D3021TexA6//D3022TexC8','D3022TexB4//D3022TexB7','D3021TexA6//D3022TexC8//D3026TexC2','D3022TexB4//D3022TexB7','D3019TexA5//D3022TexB4//D3026TexC1//D3026TexC3','D3021TexA7//D3021TexA10','D3022TexB8//D3026TexC4','D3022TexB6//D3022TexB9','D3022TexA2//D3026TexC5','D3022TexB4//D3022TexB7','D3022TexC10//D3026TexC1//D3026TexC3'),
                   rank=c(1,1,2,2,3,3,4,4,4,4,4,4,4),
                   group=c(1,2,1,2,1,2,1,2,3,4,5,6,7))

如下所示,

ids
组之间用
//
分隔,以及它们的排名:

> mydf
                                              ids rank group
1                          D3022TexB4//D3022TexB7    1     1
2                         D3022TexC10//D3026TexC1    1     2
3                          D3021TexA6//D3022TexC8    2     1
4                          D3022TexB4//D3022TexB7    2     2
5              D3021TexA6//D3022TexC8//D3026TexC2    3     1
6                          D3022TexB4//D3022TexB7    3     2
7  D3019TexA5//D3022TexB4//D3026TexC1//D3026TexC3    4     1
8                         D3021TexA7//D3021TexA10    4     2
9                          D3022TexB8//D3026TexC4    4     3
10                         D3022TexB6//D3022TexB9    4     4
11                         D3022TexA2//D3026TexC5    4     5
12                         D3022TexB4//D3022TexB7    4     6
13            D3022TexC10//D3026TexC1//D3026TexC3    4     7

我想要完成的第一件事是删除重复的

ids
条目,保留排名最低的条目(例如,保留 1 over 3)。

我可以这样做:

mydf <- mydf[!duplicated(mydf$ids),]

但是,一些较小的 id 组包含在较大的组中(并且它们的顺序可能不同),在这种情况下,我想保留较大的组。

总而言之,我的预期输出如下,但我不知道如何获得它......有任何线索吗?谢谢!

> mydf_final ids rank group 1 D3022TexB4//D3022TexB7 1 1 5 D3021TexA6//D3022TexC8//D3026TexC2 3 1 7 D3019TexA5//D3022TexB4//D3026TexC1//D3026TexC3 4 1 8 D3021TexA7//D3021TexA10 4 2 9 D3022TexB8//D3026TexC4 4 3 10 D3022TexB6//D3022TexB9 4 4 11 D3022TexA2//D3026TexC5 4 5 13 D3022TexC10//D3026TexC1//D3026TexC3 4 7
    
r dataframe duplicates grouping
1个回答
0
投票
您可以使用

aggregate

 中的 
min
Base R
 功能,如下所示:

aggregate(cbind(rank, group) ~ ids, min, data = mydf)

输出:

ids rank group 1 D3019TexA5//D3022TexB4//D3026TexC1//D3026TexC3 4 1 2 D3021TexA6//D3022TexC8 2 1 3 D3021TexA6//D3022TexC8//D3026TexC2 3 1 4 D3021TexA7//D3021TexA10 4 2 5 D3022TexA2//D3026TexC5 4 5 6 D3022TexB4//D3022TexB7 1 1 7 D3022TexB6//D3022TexB9 4 4 8 D3022TexB8//D3026TexC4 4 3 9 D3022TexC10//D3026TexC1 1 2 10 D3022TexC10//D3026TexC1//D3026TexC3 4 7
    
© www.soinside.com 2019 - 2024. All rights reserved.