r语言 - 根据特定条件删除重复项



我有一个包含计划参与者的数据集,我想在其中删除参与两个(或更多(不同计划的客户。我试图通过选择具有不同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

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

非常感谢任何帮助!

with library(dplyr)

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

下面是一个基本的 R 版本:

df[!duplicated(unique(df[, 1:2])[, 1]), ]

简而言之,找到唯一的对并删除"Client.ID"的重复项。

最新更新