Doppelte Zeilen/Fälle in R löschen (Duplikate entfernen)

von | Zuletzt bearbeitet am: Mar 6, 2023 | Daten aufbereiten, R

Bei der Digitalisieren von Papierfragebögen passiert es immer mal wieder, dass sich doppelte Fälle einschleichen. Aber auch digitale Erfassungen arbeiten leider nicht immer fehlerfrei, sodass Duplikate im Datensatz sein können. In diesem Beitrag zeige ich 2 Möglichkeiten, um diesem Problem zu begegnen.

 

1 Duplikate finden – mit Bordmitteln von R

Bevor man sich an das Löschen im nächsten Absatz macht, kann es hilfreich sein, die jeweilige Nummer der doppelten Datensätze zunächst angezeigt zu bekommen. Hierzu gibt es in R die duplicated()-Funktion.


data1 <- duplicated(data)

Im Ergebnis erhält man eine Übersicht, in der mit TRUE angezeigt wird, dass der betreffende Fall ein Duplikat eines anderen (vorhergehenden) Falles ist. Im Beispielfall ist der allerletzte Fall in Zeile 52 ein Duplikat.

Die Zeilennummer des Falles mit TRUE lest ihr ab, indem ihr die Zählung am Beginn der jeweiligen Zeile in der Übersicht fortsetzt.


 [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[17] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[33] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[49] FALSE FALSE FALSE  TRUE

 

2 Duplikate entfernen - mit Bordmitteln von R

R liefert standardmäßig die unique()-Funktion mit, um Duplikate direkt löschen zu können. Hierzu erstellt man einen neuen Dataframe (hier z.B. data1) und wendet die unique()-Funktion auf den betreffenden Datensatz an.


data1 <- unique(data)

Im Ergebnis werden nur die Fälle gelöscht, die zu 100 %, also über alle Variablen hinweg, identisch zu anderen Fällen sind. Oder anders ausgedrückt, es werden nur zu 100 % einmalig vorkommende Fälle beim Überführen in den neuen Dataframe (data1) beibehalten.

Sollte allerdings z.B. eine laufende Nummer existieren, die automatisch im Vorfeld hochgezählt wurde, alle anderen Variablen aber identisch sein, wird diese gezeigte Prüfung ins Leere laufen, weil ALLE Variablen zur Prüfung verwendet werden. Dem kann allerdings mit dem dplyr-Paket begegnet werden, wie ich nachfolgend in 3.2 zeige.

 

3 Duplikate entfernen, mit dem Paket dplyr

Zunächst muss das dplyr-Paket mit install.packages("dplyr") installiert und mit library(dplyr) geladen werden.


install.packages("dplyr")
library(dplyr)

 

3.1 100%ige Duplikate entfernen

Im Anschluss kann mit dem sog. Pipe-Operator (%>%) die distinct()-Funktion verwendet werden. Hierzu wird ein neuer Dataframe (hier z.B. data2) definiert, in den mit der distinct()-Funktion nur eindeutige Fälle aus der Datenquelle data überführt werden. Dies ist analog zur unique()-Funktion zu oben.


data2 <- data %>% distinct()

 

3.2 Duplikate anhand ausgewählter Variablen löschen

Im Idealfall existiert ein sog. "Identifier", bestehend aus verschiedenen Ziffern und Buchstaben, welcher Namen, Geburtstag, -ort usw. kombiniert, den Probanden im Vorfeld erstellen müssen. Anhand dessen ist eine Dopplung extremst unwahrscheinlich. Notwendig ist hier noch das Argument .keep_all = TRUE - damit werden alle Variablen behalten, da sonst nur die Prüfvariable in der distinct()-Funktion behalten wird.


data3 <- data %>% distinct(Identifier, .keep_all = TRUE)

Um sicherzustellen, dass zwei verschiedene Identifier aus irgendwelchen technischen Gründen oder menschlichem Kopierversagen nicht dieselben Daten haben, kann eine Verbindung aus weiteren Variablen getestet werden. Wenn diese Variablen in Kombination exakt übereinstimmen, sind Duplikate vorhanden, die entfernt werden. Ein Beispiel: es wird geprüft, ob das exakte Alter, der Geburtsort und der BMI übereinstimmen:


data4 <- data %>% distinct(Alter_exakt, Gebutsort, BMI, .keep_all = TRUE)

Im Ergebnis erhält man nur Fälle, die hinsichtlich dieser 3 Variablen NICHT übereinstimmen - was je nach Wertebereich der Variablenausprägungen und deren Kombinationen quasi ausgeschlossen werden kann.

 

Videotutorial

Hat dir der Beitrag geholfen?

Dann würde ich mich über eine kleine Spende freuen, die es mir erlaubt, weiterhin kostenfreie Inhalte zu veröffentlichen.
Alternativ kannst du über meinen Amazon Affiliate-Link einkaufen – ohne Zusatzkosten.

Vielen Dank und viel Erfolg!

Über mich

Björn Walther

Ein 💚 für Statistik & Datenanalyse

Excel Online-Kurs

YouTube-Kanal

Inhalt