根据特定条件删除重复项

时间:2017-11-18 17:13:56

标签: r duplicates

我有一个程序参与者的数据集,我想删除参与两个(或更多)不同程序的客户。我尝试通过选择具有不同ID的客户端和在同一程序中多次参与的客户端来解决此任务,然后希望加入这两个子集,但我一直都在失败。以下是我对小样本的尝试:

Client.ID = c(1, 2, 2, 3, 3)
Program = c("P1", "P2", "P2", "P1", "P2")
From = as.Date(c("2016-10-01", "2016-01-25", "2016-07-01", "2016-04-06", "2016-05-01")) 
To = as.Date(c("2017-03-31", "2016-06-30", "2016-11-27", "2016-06-03", "2016-06-02")) 
df = tibble(Client.ID, Program, From, To)

df
# A tibble: 5 x 4
  Client.ID Program       From         To
      <dbl>   <chr>     <date>     <date>
1         1      P1 2016-10-01 2017-03-31
2         2      P2 2016-01-25 2016-06-30
3         2      P2 2016-07-01 2016-11-27
4         3      P1 2016-04-06 2016-06-03
5         3      P2 2016-05-01 2016-06-02


distinct(df, Client.ID, .keep_all = TRUE) #this selects distinct cases nicely
df[duplicated(df$Client.ID) & !duplicated(df$Program),] #but this does not work

我试着在论坛上查看其他问题,但我只找到了基于两个变量来处理重复的问题,例如herehere。我想做其他事情:删除第一个变量中重复的案例,但在第二个变量中有不同的值。多次参与同一计划的客户应留在数据集中。

非常感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

library(dplyr)

df %>% group_by(Client.ID) %>%
    filter(length(unique(Program)) < 2 )

答案 1 :(得分:0)

这是一个基础R版本:

Treeview

单词中,找到唯一对并删除“Client.ID”的重复项。