2016-03-19 5 views
-2

Ich habe einen Datensatz mit Kunden Kaufinformationen. Ich habe versucht, eine eindeutige ID zu erstellen, indem ich Device_id (des Kunden), Store_id, Produkt_ID und Datum (des Kaufs) verkettet habe.So verwenden Sie duplizierten()

 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 

Wie erwartet gibt es noch Duplikate: Ich habe den folgenden Code für diesen

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

Die resultierende Spalte so etwas wie diese verwendet. Um diese zu identifizieren i verwendet duplizierten():

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

jedoch für einige der x1 $ device_store_product_date nur einzelne Einträge vorhanden sind. Dies sollte nicht der Fall sein, da x1 aus wiederholten Werten bestehen sollte. Lass mich wissen, wo ich falsch liege. So wählen Sie Einträge zu einem bestimmten Wert von device_store_product_date entsprechenden habe ich verwendet:

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

Antwort

0

dupliziert() gibt TRUE für jeden Wert, der bereits aufgetreten ist, so

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

kehrt

FALSE FALSE TRUE 

Wenn Sie auch das erste Vorkommen erhalten möchten, funktioniert so etwas wie

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

Das ist mein Problem gelöst ... Dank. Wenn möglich, könntest du bitte erklären duplicated (x) | rev (dupliziert (rev (x))). Ich habe gerade angefangen, R. zu lernen. –

+0

Der vertikale Balken bedeutet OR und rev() wird die Reihenfolge des Vektors umkehren, also fange an, vom anderen Ende nach Duplikaten zu suchen. Die Lösung von akrun ist eleganter. –

0

Die duplicated Funktion hat ein Argument fromLast=TRUE, um nach Duplikaten vom Ende zu suchen. Hier ist das letzte Element FALSE und alle anderen Duplikate geben TRUE zurück. Mit | stellen wir sicher, dass alle doppelten Elemente enthalten sind.

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

kann verwendet werden, um alle doppelten Elemente zu erhalten