R's duplicateddevuelve un vector que muestra si cada elemento de un vector o marco de datos es un duplicado de un elemento con un subíndice más pequeño. Entonces, si las filas 3, 4 y 5 de un marco de datos de 5 filas son iguales, duplicatedme darán el vector
FALSE, FALSE, FALSE, TRUE, TRUE
Pero en este caso realmente quiero obtener
FALSE, FALSE, TRUE, TRUE, TRUE
es decir, quiero saber si una fila también está duplicada por una fila con un subíndice más grande .
fuente

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), ]devolví las tres copias de 7, 8 y 9. ¿Por qué funciona?duplicated(c(1,1,1))vsduplicated(c(1,1,1,), fromLast = TRUE)dac(FALSE,TRUE,TRUE)yc(TRUE,TRUE,FALSE). El valor medio esTRUEen ambos casos. Tomando|ambos vectores dac(TRUE,TRUE,TRUE).Necesita ensamblar el conjunto de
duplicatedvalores, aplicaruniquey luego probar con%in%. Como siempre, un problema de muestra hará que este proceso cobre vida.fuente
duplicated,uniquey%in%podría generalizarse fácilmente a un marco de datos si uno fuera primeropastecada fila con un carácter separador inusual. (La respuesta aceptada es mejor.)He tenido la misma pregunta y, si no me equivoco, esta también es una respuesta.
Sin embargo, no sé cuál es más rápido, el conjunto de datos que estoy usando actualmente no es lo suficientemente grande para hacer pruebas que produzcan brechas de tiempo significativas.
fuente
vectanto como vector atómico como como marco de datos. Sospecho que con un marco de datos real fallaría.Las filas duplicadas en un marco de datos se pueden obtener
dplyrhaciendoPara excluir ciertas columnas se
group_by_at(vars(-var1, -var2))podría utilizar en su lugar para agrupar los datos.Si realmente se necesitan los índices de fila y no solo los datos, puede agregarlos primero como en:
fuente
n(). No olvide desagrupar el marco de datos resultante.Aquí está la solución de @Joshua Ulrich como función. Este formato le permite usar este código de la misma manera que usaría duplicated ():
Usando el mismo ejemplo:
fuente
Si está interesado en qué filas están duplicadas para ciertas columnas, puede usar un enfoque plyr :
Añadiendo una variable de recuento con dplyr :
Para filas duplicadas (considerando todas las columnas):
El beneficio de estos enfoques es que puede especificar cuántos duplicados como límite.
fuente
Tuve un problema similar, pero necesitaba identificar filas duplicadas por valores en columnas específicas. Se me ocurrió la siguiente solución dplyr :
El código agrupa las filas por columnas específicas. Si la longitud de un grupo es mayor que 1, el código marca todas las filas del grupo como duplicadas. Una vez hecho esto, puede usar la
Duplicatedcolumna para filtrar, etc.fuente