Encontrar TODAS las filas duplicadas, incluidos los “elementos con subíndices más pequeños”

R’s duplicated devuelve un vector que muestra si cada elemento de un vector o dataframe es un duplicado de un elemento con un subíndice más pequeño. Entonces, si las filas 3, 4 y 5 de un dataframe de 5 filas son iguales, duplicated me dará 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 está duplicada por una fila con un subíndice más grande también.

duplicated tiene un argumento del fromLast . La sección “Ejemplo” de ?duplicated muestra cómo usarlo. Simplemente llame duplicated dos veces, una vez con fromLast=FALSE y una vez con fromLast=TRUE y tome las filas donde cualquiera de ellas sea TRUE .


Algunos finales Editar: No proporcionó un ejemplo reproducible, así que aquí hay una ilustración amablemente aportada por @jbaums

 vec < - c("a", "b", "c","c","c") vec[duplicated(vec) | duplicated(vec, fromLast=TRUE)] ## [1] "c" "c" "c" 

Debe ensamblar el conjunto de valores duplicated , aplicarlos unique y luego probar con %in% . Como siempre, un problema de muestra hará que este proceso cobre vida.

 > vec < - c("a", "b", "c","c","c") > vec[ duplicated(vec)] [1] "c" "c" > unique(vec[ duplicated(vec)]) [1] "c" > vec %in% unique(vec[ duplicated(vec)]) [1] FALSE FALSE TRUE TRUE TRUE 

He tenido la misma pregunta , y si no me equivoco, esta también es una respuesta.

 vec[col %in% vec[duplicated(vec$col),]$col] 

No sé cuál es más rápido, sin embargo, el conjunto de datos que estoy utilizando actualmente no es lo suficientemente grande como para realizar pruebas que produzcan brechas de tiempo significativas.