Rs duplicated
gibt einen Vektor zurück, der zeigt, ob jedes Element eines Vektors oder Datenrahmens ein Duplikat eines Elements mit einem kleineren Index ist. Wenn also die Zeilen 3, 4 und 5 eines 5-Zeilen-Datenrahmens gleich sind, duplicated
erhalte ich den Vektor
FALSE, FALSE, FALSE, TRUE, TRUE
Aber in diesem Fall möchte ich eigentlich bekommen
FALSE, FALSE, TRUE, TRUE, TRUE
Das heißt, ich möchte wissen, ob eine Zeile auch von einer Zeile mit einem größeren Index dupliziert wird .
quelle
x <- c(1:9, 7:10, 5:22); y <- c(letters, letters[1:5]); test <- data.frame(x, y); test[duplicated(test$x) | duplicated(test$x, fromLast=TRUE), ]
Alle drei Kopien von 7, 8 und 9 zurückgegeben. Warum funktioniert das?duplicated(c(1,1,1))
vsduplicated(c(1,1,1,), fromLast = TRUE)
gibtc(FALSE,TRUE,TRUE)
undc(TRUE,TRUE,FALSE)
. Der mittlere Wert istTRUE
in beiden Fällen. Das Nehmen|
beider Vektoren ergibtc(TRUE,TRUE,TRUE)
.Sie müssen den Wertesatz zusammenstellen
duplicated
, anwendenunique
und dann mit testen%in%
. Wie immer wird ein Beispielproblem diesen Prozess zum Leben erwecken.quelle
duplicated
,unique
und%in%
leicht zu einem Datenrahmen verallgemeinert werden könnte , wenn man zuerst warenpaste
mit einem ungewöhnlichen Trennzeichen jede Zeile. (Die akzeptierte Antwort ist besser.)Ich hatte die gleiche Frage , und wenn ich mich nicht irre, ist dies auch eine Antwort.
Keine Ahnung, welches schneller ist. Der Datensatz, den ich derzeit verwende, ist jedoch nicht groß genug, um Tests durchzuführen, die erhebliche Zeitlücken verursachen.
quelle
vec
sowohl als Atomvektor als auch als Datenrahmen zu dienen. Ich vermute, dass es mit einem tatsächlichen Datenrahmen fehlschlagen würde.Durch Ausführen von können doppelte Zeilen in einem Datenrahmen erhalten
dplyr
werdenZum Ausschließen bestimmter Spalten
group_by_at(vars(-var1, -var2))
können stattdessen die Daten gruppiert werden.Wenn die Zeilenindizes und nicht nur die Daten tatsächlich benötigt werden, können Sie sie zuerst wie folgt hinzufügen:
quelle
n()
. Vergessen Sie nicht, die Gruppierung des resultierenden Datenrahmens aufzuheben.Hier ist die Lösung von @Joshua Ulrich als Funktion. Mit diesem Format können Sie diesen Code auf dieselbe Weise verwenden, wie Sie duplicated () verwenden würden:
Verwenden Sie das gleiche Beispiel:
quelle
Wenn Sie daran interessiert sind, welche Zeilen für bestimmte Spalten dupliziert werden, können Sie einen Plyr- Ansatz verwenden:
Hinzufügen einer Zählvariablen mit dplyr :
Für doppelte Zeilen (unter Berücksichtigung aller Spalten):
Der Vorteil dieser Ansätze besteht darin, dass Sie angeben können, wie viele Duplikate als Cutoff verwendet werden sollen.
quelle
Ich hatte ein ähnliches Problem, musste jedoch doppelte Zeilen anhand von Werten in bestimmten Spalten identifizieren. Ich habe die folgende dplyr- Lösung gefunden:
Der Code gruppiert die Zeilen nach bestimmten Spalten. Wenn die Länge einer Gruppe größer als 1 ist, markiert der Code alle Zeilen in der Gruppe als dupliziert. Sobald dies erledigt ist, können Sie die
Duplicated
Spalte zum Filtern usw. verwenden.quelle