Mostrando entradas con la etiqueta duplicated. Mostrar todas las entradas
Mostrando entradas con la etiqueta duplicated. Mostrar todas las entradas

2017-10-16

Eliminar columnas con nombres duplicados de un data frame en R

Problema

Queremos eliminar las columnas con nombres duplicados de un data frame en R.

df <- data.frame(a = 1:2, b = 1:2, 
                 c = 1:2, a = 2:3, 
                 a = 2:3, b = 2:3, 
                 check.names = F)
  a b c a a b
1 1 1 1 2 2 2
2 2 2 2 3 3 3

Solución

  • Base
  • df[, !duplicated(df)] # o bien
    df[, unique(df)]
    
     a b c
    1 1 1 1
    2 2 2 2
    
  • dplyr
  • Empleamos funciones del paquete base pero evitamos los corchetes para hacerla más legible.

    library(dplyr)
    df %>% subset(select = !duplicated(names(.))) # o bien
    df %>% subset(select = unique(names(.)))
    

2016-03-19

Eliminar de un data frame aquellas filas duplicadas en otro data frame

Title

Problema

Queremos seleccionar las filas de A que no están presentes en in B. El resultado esperado es el data frame C.

A <- structure(list(Var1 = c(1L, 2L, 4L, 4L, 6L), Var2 = c(3L, 5L, 
5L, 5L, 7L), Var3 = c(4L, 6L, 7L, 8L, 9L)), .Names = c("Var1", 
"Var2", "Var3"), class = "data.frame", row.names = c(NA, -5L))
B <- structure(list(Var1 = 1:2, Var2 = c(3L, 5L), Var3 = c(4L, 6L)), .Names = c("Var1", "Var2", "Var3"), class = "data.frame", row.names = c(NA, -2L))
# A
  Var1 Var2 Var3
1    1    3    4
2    2    5    6
3    4    5    7
4    4    5    8
5    6    7    9
# B
  Var1 Var2 Var3
1    1    3    4
2    2    5    6

  • Resultado esperado
  • # C
      Var1 Var2 Var3
    3    4    5    7
    4    4    5    8
    5    6    7    9
    

    Solución

  • Paquete base R
  • C <- rbind(A, B)
    C[!(duplicated(C) | duplicated(C, fromLast = TRUE)), ]
    

  • dplyr
  • library(dplyr)
    anti_join(A, B)
    

  • sqldf
  • library(sqldf)
    C <- sqldf('SELECT * FROM A EXCEPT SELECT * FROM B')
    

  • data.table
  • library(data.table)
    setDT(df1)[!df2, on = names(df1)]
    

    Entradas relacionadas

    Referencias

    2015-06-29

    Eliminar duplicados de un data frame en R

    Title

    Problema

    Deseamos eliminar los duplicados de un data frame en R.

    Solución

    Disponemos de múltiples opciones. Emplearemos como ejemplo el conjunto de datos iris que contiene dos filas duplicadas: la 102 y la 143

  • Paquete base
  • Detectamos los duplicados.

    # De arriba a abajo
    anyDuplicated(iris) # Número de fila
    iris[duplicated(iris), ]  # Fila
    
        Sepal.Length Sepal.Width Petal.Length Petal.Width   Species
    143          5.8         2.7          5.1         1.9 virginica
    
    # De abajo a arriba
    anyDuplicated(iris, fromLast = TRUE)
    iris[duplicated(iris, fromLast = TRUE), ]
    
        Sepal.Length Sepal.Width Petal.Length Petal.Width   Species
    102          5.8         2.7          5.1         1.9 virginica
    
    Eliminamos los duplicados.

    unique(iris)
    iris[!duplicated(iris), ]
    # En orden inverso
    unique(iris, fromLast = TRUE)
    iris[!duplicated(iris, fromLast = TRUE), ]
    
  • Paquete dplyr
  • library(dplyr)
    iris %>% distinct
    
  • Paquete sqldf
  • library(sqldf)
    sqldf('SELECT DISTINCT * FROM iris')
    

    Notas

    Usando el paquete base veremos que conserva el número de filas —150— aunque observaremos, dependiendo del orden que hayamos escogido, que la fila 102 o 143 habrá desaparecido. En cambio con dplyr y sqldf, el resultado numera de nuevo las filas, mostrando la última con el número 149.

    Entradas relacionadas

    Nube de datos