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