删除基于 2 列的重复项,但保留第 3 列不为空的行

问题描述

我有一个名称和日期中有一些重复的数据集,但是第 3 列有一个数字或空值,当删除重复时我想使条件保持在第 3 列中的非空值>

示例:

table

我想保留所有蓝色的,所以你可以看到我不想去掉所有的空值。如果我突出显示日期和名称列并删除重复项,则它首先保留,并且没有关于数字在重复项中显示为第一还是第二的模式。

任何帮助将不胜感激。

谢谢

解决方法

试试这个:


library(gdata)

your.data <- tibble(
    Name = c("Wanita Jones","Wanita Jones","Corbin Dallas","Alex Mills","Andrea Coyle","Andrea Coyle"),Date = c("01/24/2021","01/24/2021","03/28/2021","03/29/2021","03/31/2021","03/27/2021","04/01/2021"),Request = c("null",6,7,"null",1,10,"null")
)

your.data %>% filter(
    !duplicated2(interaction(Name,Date)) | Request != "null"
)

输出:


# A tibble: 7 x 3
  Name          Date       Request
  <chr>         <chr>      <chr>  
1 Wanita Jones  01/24/2021 6      
2 Corbin Dallas 03/28/2021 7      
3 Corbin Dallas 03/29/2021 null   
4 Corbin Dallas 03/31/2021 1      
5 Alex Mills    01/24/2021 10     
6 Andrea Coyle  03/27/2021 null   
7 Andrea Coyle  04/01/2021 null   

如果您对安装 gdata 没有兴趣,您可以先对 Request 进行排序,确保重复项的第一项始终是不为 null 的项:


your.data %>% arrange( Request == "null" ) %>%
    filter(
        !duplicated(interaction(Name,Date)) | Request != "null"
    ) %>% arrange( Date,Name )

或者只是粘贴 source

中的函数