如何根据另一列的最高值,从一列中的几个相等值中选择一行?

How to choose one row out of several of equal value in a column, depending on the highest value of another column?

所以我有一个这样的数据框,包含物种名称、ID、标记和 DNA 序列的大小:

 Species           |  ID| marker| size   
-----------------------------------------------------
Tilapia guineensis |   1|   co1 |  400
Tilapia guineensis |   1|   co2 |  300
Tilapia guineensis |   1|   co2 |  700
Tilapia guineensis |   1|   co2 |  900
Tilapia zillii     |   2|   co5 |  600
Tilapia zillii     |   2|   coi8|  200
Tilapia zillii     |   2|   coi8|  500
Eutrigla gurnardus |   5|   co1 |  100
Eutrigla gurnardus |   5|   co2 |  200 
Sprattus sprattus  |   6|   co3 |  300 
Sprattus sprattus  |   6|   co4 |  400
Sardinia pichardus |   7|   co1 |  800
Sardinia pichardus |   7|   co2 |  800

我只想为每个 ID 保留一行,但我想保留在大小列中具有最高值的行,而不考虑物种和标记列。如果行具有相同的 ID 和相同的大小,我想随机保留一个。 我的输出将是:

 Species           |  ID| marker| size   
-----------------------------------------------------
Tilapia guineensis |   1|   co2 |  900
Tilapia zillii     |   2|   co5 |  600
Eutrigla gurnardus |   5|   co2 |  200 
Sprattus sprattus  |   6|   co4 |  400
Sardinia pichardus |   7|   co2 |  800

可能的解决方案:

library(dplyr)

df %>% 
  group_by(ID) %>% 
  slice_max(size)

#> # A tibble: 4 × 4
#> # Groups:   ID [4]
#>   Species               ID marker  size
#>   <chr>              <int> <chr>  <int>
#> 1 Tilapia guineensis     1 co2      900
#> 2 Tilapia zillii         2 co5      600
#> 3 Eutrigla gurnardus     5 co2      200
#> 4 Sprattus sprattus      6 co4      400

data.table 选项:

library(data.table)
setDT(df)[, .SD[which.max(size)], by=ID]