Ich habe einen data.frame wie diesen -
set.seed(123)
df = data.frame(x=sample(0:1,10,replace=T),y=sample(0:1,10,replace=T),z=1:10)
> df
x y z
1 0 1 1
2 1 0 2
3 0 1 3
4 1 1 4
5 1 0 5
6 0 1 6
7 1 0 7
8 1 0 8
9 1 0 9
10 0 1 10
Ich möchte doppelte Zeilen basierend auf den ersten beiden Spalten entfernen. Erwartete Ausgabe -
df[!duplicated(df[,1:2]),]
x y z
1 0 1 1
2 1 0 2
4 1 1 4
Ich suche speziell nach einer Lösung mit dplyr
Paket.
df %>% group_by(x, y) %>% do(head(.,1))
distinct()
Hier ist eine Lösung mit
dplyr >= 0.5
.quelle
Der Vollständigkeit halber funktioniert auch Folgendes:
Ich bevorzuge jedoch die Verwendung der Lösung
distinct
und vermute, dass sie auch schneller ist.quelle
Die beste Lösung ist
distinct()
meistens die Verwendung von dplyr, wie bereits vorgeschlagen wurde.Hier ist jedoch ein anderer Ansatz, der die
slice()
Funktion von dplyr verwendet.Unterschied zur Verwendung der
distinct()
FunktionDer Vorteil dieser Lösung besteht darin, dass explizit angegeben wird, welche Zeilen vom ursprünglichen Datenrahmen beibehalten werden, und dass sie sich gut mit der
arrange()
Funktion koppeln lässt .Angenommen, Sie hatten Kundenverkaufsdaten und wollten einen Datensatz pro Kunde behalten, und Sie möchten, dass dieser Datensatz der Datensatz aus dem letzten Kauf ist. Dann könnten Sie schreiben:
quelle
Wenn Sie Spalten in R für einen reduzierten Datensatz auswählen, kann es häufig zu Duplikaten kommen.
Diese beiden Zeilen ergeben das gleiche Ergebnis. Jeder gibt einen eindeutigen Datensatz mit nur zwei ausgewählten Spalten aus:
quelle
Wenn Sie möchten , um die Zeilen zu finden , die dupliziert werden Sie verwenden können ,
find_duplicates
aushablar
:quelle