2016-05-04

Eliminar duplicados de un data frame basándonos en dos columnas en R

Title

Problema

Queremos eliminar las filas duplicadas, considerando éstas como aquellas que tienen el mismo valor en las columnas col1 y col2 ignorando su orden. En el siguiente ejemplo solamente conservaríamos una fila.

  Col1 Col2 database
1    A    B   IntAct
2    A    B     Bind
3    B    A  BioGrid
df <- structure(list(Col1 = c("A", "A", "B"), Col2 = c("B", "B", "A"
), database = c("IntAct", "Bind", "BioGrid")), .Names = c("Col1", 
"Col2", "database"), class = "data.frame", row.names = c(NA, 
-3L))

Solución

Emplearemos el paquete sqldf.

  • Primera fila
  • En el caso de querer conservar la primera fila. Creamos una columna id para identificar la primera ocurrencia.

    library(sqldf)
    df$id <- seq.int(nrow(df))
    sqldf("select col1, col2, database, min(id) id
          from (select col1, col2, database, id from df where col1 <= col2
          union all
          select col2 col1, col1 col2, database, id from df where col1 > col2) 
          group by col1, col2")
    
      col1 col2 database id
    1    A    B   IntAct  1
    

  • Última fila
  • En el caso de querer conservar la última fila. En este caso el código es más conciso pues no necesitamos crear una columna para identificar la primera ocurrencia.

    sqldf("select col1, col2, database 
          from (select col1, col2, database from df where col1 <= col2 
          union all 
          select col2 col1, col1 col2, database from df where col1 > col2) 
          group by col1, col2")
    
     col1 col2 database
    1    A    B  BioGrid
    

    Entradas relacionadas

    Referencias

    No hay comentarios:

    Publicar un comentario

    Nube de datos