2016-03-19 4 views
-2

私は顧客の購入情報を持つデータセットを持っています。私はdevice_id(顧客の)、store_id、product_idと(購入の)日付を連結して一意のIDを作成しようとしました。私はこのduplicated()の使用方法

customer$device_store_product_date <- paste(customer$device, customer$store_id, customer$product_id, customer$date, sep='_') 

結果の列に次のコードを使用している、このようなものである:予想通りの重複がまだある

 device_store_product_date 
48c6eec37affa1db_203723_9313962_2016-02-19 
eb2c2f00071b97f3_179926_6180944_2016-02-20 
d82066a784c9552_180704_9308311_2016-02-20 
9766bba65b1ef9ac_204187_9313852_2016-02-20 
77d80c1066f5267_180488_9312672_2016-02-20 

。 )(私は重複使用し、それらを特定するには:

x1 = customer[duplicated(customer$device_store_product_date),] 

しかし、×1 $のdevice_store_product_dateのいくつかのためにのみ、単一のエントリが存在しています。これは、x1が繰り返される値で構成されるべきであるため、そうではありません。どこが間違っているのか教えてください。私が使用しているdevice_store_product_dateの特定の値に対応するエントリを選択する:

filter(x1, x1$device_store_product_date=="14163e6b6ed06890_203723_9313477_2016-02-20") 

答えて

0

()が発生し、すでにた任意の値のTRUEを返し、複製ので

x <-c("a","b","a") 
duplicated(x) 

が返され

FALSE FALSE TRUE 

最初に出てくるものをすべて取りたい場合は、このようなものが動作します

duplicated(x)|rev(duplicated(rev(x))) 
+0

を取得するために使用することができます。可能であれば、duplicated(x)| rev(duplicated(rev(x)))を説明してください。私はちょうどRの学習を始めたばかりです。 –

+0

垂直バーはORとrev()がベクトルの順序を逆転させるので、もう一方の端から重複を探し始めることを意味します。 akrunのソリューションはよりエレガントです。 –

0

duplicated関数は、最後から重複をチェックするために引数fromLast=TRUEを持っています。ここでは、最後の要素はFALSEになり、他のすべての重複はTRUEを返します。 |を使用することにより、重複する要素がすべて含まれていることを確認します。

duplicated(x)|duplicated(x, fromLast=TRUE) 

は...おかげで私の問題を解決し、すべての重複要素