org - Encontrar TODAS las filas duplicadas, incluidos los "elementos con subíndices más pequeños"
r studiodio (3)
R''s duplicated
devuelve 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, 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.
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.
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"