studiodio org for r r-faq

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"