我有一个大型数据集,它是通过组合来自多个来源的数据来构建的。因此,有许多行是重复的。我知道如何使用dplyr和distinct删除重复项,但我希望它始终保持基于单元格(源文件)中的特定值的行。本质上,我们有一个排名,我们更喜欢哪一个来源。下面是一个非常简化的数据集,可用作示例:
mydata = data.frame (species =c ('myli','myli','myli','myli','myli','stili','stili','stili'),
count = c (10,10,15,15,12,10,10,10),
year =c(2020,2020,2021,2021,2019,2017,2017,2018),
source =c('zd','steam','ted','steam','zd','steam','ted','steam'))
mydata
species count year source
1 myli 10 2020 zd
2 myli 10 2020 steam
3 myli 15 2021 ted
4 myli 15 2021 steam
5 myli 12 2019 zd
6 stili 10 2017 steam
7 stili 10 2017 ted
8 stili 10 2018 steam我执行以下操作以删除重复的副本:
library(dplyr)
# Remove duplicate rows of the dataframe using 'species', 'count', and 'year' variables
distinct(mydata, species, count, year, .keep_all= TRUE)
species count year source
1 myli 10 2020 zd
2 myli 15 2021 ted
3 myli 12 2019 zd
4 stili 10 2017 steam
5 stili 10 2018 steam但是,我希望确保在存在重复时保留的行按照以下顺序排列“源”的优先级: zd > ted >蒸汽,因此最后一个表如下所示:
species count year source
1 myli 10 2020 zd
2 myli 15 2021 ted
3 myli 12 2019 zd
4 stili 10 2017 ted
5 stili 10 2018 steam因此,基本上保留原始行'1‘、'3’、'5‘、'7’和'8‘,删除重复行'2’、'4‘和'6’。
对于如何完成最后一步,对保留重复行的原始行进行优先排序,我表示赞赏。
非常感谢你,阿曼达
发布于 2022-06-16 13:19:44
由于您的优先级恰好是按相反的字母顺序排列的,所以在本例中,您可以在arrange(desc(source))调用之前简单地进行distinct()。
mydata %>%
arrange(desc(source)) %>%
distinct(species,count,year,.keep_all = T)输出
species count year source
1 myli 10 2020 zd
2 myli 12 2019 zd
3 myli 15 2021 ted
4 stili 10 2017 ted
5 stili 10 2018 steam发布于 2022-06-16 13:18:59
尊重秩序。因此,由于您的标准是按字母顺序排列的,所以您可以这样做:
mydata |>
arrange(desc(source)) |>
distinct(species, count, year, .keep_all= TRUE).*在其他情况下,您需要使用顺序创建一个变量。
https://stackoverflow.com/questions/72646390
复制相似问题