2017-11-18 10 views
1

私は、2つ(またはそれ以上)の異なるプログラムに参加しているクライアントを削除したいプログラム参加者のデータセットを持っています。異なるIDを持つクライアントと、同じプログラムに複数回参加したクライアントを選択し、これらの2つのサブセットに参加することを希望してこの作業を回避しようとしましたが、失敗しています。ここでは、少量のサンプルで私の試みは、次のとおりです。特定の条件に基づいて重複を削除します

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番目の変数に入れる。同じプログラムに複数回参加したクライアントは、データセットにとどまるべきです。

何か助けてくれてありがとう! library(dplyr)

答えて

1

:すなわち

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

、ユニークなペアを見つけると "Client.ID" の重複を削除:

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

私はそれを理解するのにしばらくかかりましたが、私はそれを得ました!どうもありがとうございます。 – malasi

0

ここで、ベースRのバージョンがあります。

+0

これは、データフレームにクライアント3を保持するため、動作していないようです。 – malasi

関連する問題