Ich versuche herauszufinden, wie Duplikate basierend auf drei Variablen entfernt werden können (id, key, and num
). Ich möchte das Duplikat mit der geringsten Anzahl an gefüllten Spalten entfernen. Wenn eine gleiche Anzahl gefüllt ist, kann beides entfernt werden. Um zum Beispiel die folgenden sein würdeDuplikate entfernen, aber die vollständigste Iteration beibehalten
Original <- data.frame(id= c(1,2,2,3,3,4,5,5),
key=c(1,2,2,3,3,4,5,5),
num=c(1,1,1,1,1,1,1,1),
v4= c(1,NA,5,5,NA,5,NA,7),
v5=c(1,NA,5,5,NA,5,NA,7))
Der Ausgang:
Finished <- data.frame(id= c(1,2,3,4,5),
key=c(1,2,3,4,5),
num=c(1,1,1,1,1),
v4= c(1,5,5,5,7),
v5=c(1,5,5,5,7))
Mein richtige Datenmenge größer ist und eine Mischung aus meist numerisch, aber einige Zeichenvariablen, aber ich die beste nicht bestimmen konnte einen Weg, dies zu tun. Ich habe zuvor ein Programm verwendet, das etwas Ähnliches innerhalb des duplicates-Befehls namens check.all tun würde.
Bisher haben meine Gedanken gewesen Grepl zu verwenden und bestimmen, wo „alles“ vorhanden ist
Present <- apply(Original, 2, function(x) grepl("[[:alnum:]]", x))
Dann den resultierenden Datenrahmen für frage ich mit rowSums und cbind es mit dem Original.
CompleteNess <- rowSums(Present)
cbind(Original, CompleteNess)
Dies ist der Punkt, wo ich nicht sicher meine nächsten Schritte bin ... Ich habe eine Variable, die mir sagt, wie viele Spalten in jeder Zeile (Vollständigkeits) gefüllt sind; Ich bin mir jedoch nicht sicher, wie Duplikate implementiert werden sollen.
Einfach, ich suche nach Wenn ID, Schlüssel und Num dupliziert werden - behalten Sie die Zeile mit dem höchsten Wert von CompleteNess.
Wenn mir jemand einen besseren Weg vorstellen kann, um dies zu tun oder mich durch das letzte bisschen zu bringen, würde ich es sehr schätzen. Danke allen!