Buscar índices de filas duplicadas [duplicar]
La función duplicada en R realiza búsqueda de filas duplicadas. Si queremos eliminar los duplicados, solo necesitamos escribir df[!duplicated(df),]
y los duplicados se eliminarán del marco de datos.
¿Pero cómo encontrar los índices de datos duplicados? Si duplicated
devuelve VERDADERO en alguna fila, significa que esta es la segunda aparición de dicha fila en el marco de datos y su índice se puede obtener fácilmente. ¿Cómo obtener el índice de primera aparición de esta fila? O, en otras palabras, ¿un índice con el que la fila duplicada es idéntica?
Podría hacer un bucle en data.frame, pero creo que hay una respuesta más elegante a esta pregunta.
He aquí un ejemplo:
df <- data.frame(a = c(1,2,3,4,1,5,6,4,2,1))
duplicated(df) | duplicated(df, fromLast = TRUE)
#[1] TRUE TRUE FALSE TRUE TRUE FALSE FALSE TRUE TRUE TRUE
¿Cómo funciona?
La función duplicated(df)
determina elementos duplicados en los datos originales. El fromLast = TRUE
indica que "la duplicación debe considerarse desde el reverso". Los dos vectores lógicos resultantes se combinan usando |
ya que a TRUE
en al menos uno de ellos indica un valor duplicado.
Si está utilizando una tabla de datos con clave , puede utilizar la siguiente sintaxis elegante
library(data.table)
DT <- data.table(A = rep(1:3, each=4),
B = rep(1:4, each=3),
C = rep(1:2, 6), key = "A,B,C")
DT[unique(DT[duplicated(DT)]),which=T]
para desempacar
DT[duplicated(DT)]
subconjuntos de aquellas filas que están duplicadas.unique(...)
devuelve sólo las combinaciones únicas de las filas duplicadas. Esto se ocupa de cualquier caso con más de 1 duplicado (duplicados duplicados, por ejemplo, triplicados, etc.)DT[..., which = T]
fusiona las filas duplicadas con el original,which=T
devolviendo el número de fila (sinwhich = T
él, solo devolvería los datos).
También podrías usar
DT[,count := .N,by = list(A,B,C)][count>1, which=T]