2015-10-08

Comparar dos vectores en R: elementos comunes y únicos

Title

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

  • Elementos comunes
  • # Múltiples opciones
    intersect(a, b)
    b[b %in% a]
    a[a %in% b]
    
    [1] "f" "g" "h" "i" "j"
  • Elementos únicos de a
  • setdiff(a, b)
    a[!a %in% b]
    a[b %in% a]
    
    [1] "a" "b" "c" "d" "e"
  • Elementos únicos de b
  • 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 descarta los duplicados
  • setdiff(a, b)
    [1] "a" "b" "c" "d" "e"
  • El operador "[]" con %in% los conserva
  • a[!a %in% b]
    [1] "a" "b" "c" "d" "e" "a"

    Entradas relacionadas

    Referencias

    2 comentarios:

    1. Excelente! Muchas gracias por la ayuda!

      ResponderEliminar
      Respuestas
      1. Me alegro de que te haya sido útil. Gracias por dejar un comentario.

        Eliminar

    Nube de datos