Problema
Deseamos comparar dos vectores en R y obtener los elemenos comunes y únicos de ambos.
Datos
# Dos vectores
[1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j"
[1] "f" "g" "h" "i" "j" "k" "l" "m" "n" "o"
a <- letters[seq(from = 1, to = 10)]
b < -letters[seq(from = 6, to = 15)]
Soluciones
# Múltiples opciones
intersect(a, b)
b[b %in% a]
a[a %in% b]
[1] "f" "g" "h" "i" "j"
setdiff(a, b)
a[!a %in% b]
a[b %in% a]
[1] "a" "b" "c" "d" "e"
setdiff(b, a)
b[!b %in% a]
b[a %in% b]
[1] "k" "l" "m" "n" "o"
Notas
Merece la pena señalar que intersect y setdiff descartarán los valores duplicados en los argumentos. Mientras que %in% conservará los duplicados. Por lo que si tuviéramos duplicados en loos vectores obtendríamos diferentes resultados. Por ejemplo, introduciendo un elemento duplicado 'a' en el vector a.
a <- c(a, "a")
[1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "a"
setdiff(a, b)
[1] "a" "b" "c" "d" "e"
a[!a %in% b]
[1] "a" "b" "c" "d" "e" "a"
Entradas relacionadas
Referencias
Excelente! Muchas gracias por la ayuda!
ResponderEliminarMe alegro de que te haya sido útil. Gracias por dejar un comentario.
Eliminar