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.
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
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
- Eliminar de un data frame aquellas filas duplicadas en otro data frame
- Eliminar duplicados de un data frame en R
- Seleccionar con sqldf un subconjunto de filas de una columna en un data frame diferente
Referencias
No hay comentarios:
Publicar un comentario