如何根据另一列的最高值,从一列中的几个相等值中选择一行?
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]
所以我有一个这样的数据框,包含物种名称、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]