首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除重复项,但根据特定列保留行

删除重复项,但根据特定列保留行
EN

Stack Overflow用户
提问于 2022-06-16 13:07:27
回答 2查看 162关注 0票数 0

我有一个大型数据集,它是通过组合来自多个来源的数据来构建的。因此,有许多行是重复的。我知道如何使用dplyr和distinct删除重复项,但我希望它始终保持基于单元格(源文件)中的特定值的行。本质上,我们有一个排名,我们更喜欢哪一个来源。下面是一个非常简化的数据集,可用作示例:

代码语言:javascript
复制
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

我执行以下操作以删除重复的副本:

代码语言:javascript
复制
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 >蒸汽,因此最后一个表如下所示:

代码语言:javascript
复制
  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’。

对于如何完成最后一步,对保留重复行的原始行进行优先排序,我表示赞赏。

非常感谢你,阿曼达

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-06-16 13:19:44

由于您的优先级恰好是按相反的字母顺序排列的,所以在本例中,您可以在arrange(desc(source))调用之前简单地进行distinct()

代码语言:javascript
复制
mydata %>% 
  arrange(desc(source)) %>% 
  distinct(species,count,year,.keep_all = T)

输出

代码语言:javascript
复制
  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
票数 2
EN

Stack Overflow用户

发布于 2022-06-16 13:18:59

尊重秩序。因此,由于您的标准是按字母顺序排列的,所以您可以这样做:

代码语言:javascript
复制
mydata |>
  arrange(desc(source)) |>
  distinct(species, count, year, .keep_all= TRUE)

.*在其他情况下,您需要使用顺序创建一个变量。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72646390

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档