Problema
Queremos comparar dos data frames en R y comprobar si tienen las mismas filas o no. También deseamos saber las filas que son iguales y diferentes.
Datos
Date Time pH
1 10/8 600 3.85
2 10/9 800 4.05
3 10/10 1300 3.95
Date Time pH
1 10/8 600 3.85
2 10/12 900 4.05
3 10/10 1300 3.95
df1 <- read.table(text="Date Time pH
1 10/8 600 3.85
2 10/9 800 4.05
3 10/10 1300 3.95",
head=TRUE)
df2 <- read.table(text="Date Time pH
1 10/8 600 3.85
2 10/12 900 4.05
3 10/10 1300 3.95",
head=TRUE)
Soluciones
Si solamente deseamos saber si dos data frames son o no iguales, es tan sencillo como:
identical(df1, df2)
[1] FALSE
Para comparar fila a fila, disponemos de varias alternativas con diferentes paquetes. A efectos ilustrativos calculamos las filas en df1 que no se encuentran en df2. Para obtener las de df2 no presentes en df2, alterar el orden en el código.
library(compare)
compare(df1, df2)
FALSE [FALSE, FALSE, TRUE]
La salida de datos indica primero si el data frame es igual y entre corchetes si las filas son iguales (TRUE) o no (FALSE).
Si queremos incluir los valores no disponibles (NAs), utilizamos la función addNA:
library(dplyr)
Filas diferentes presentes en el df1
anti_join(df1, df2)
Date Time pH
1 10/9 800 4.05
Filas comunes
semi_join(df1, df2)
Date Time pH
1 10/8 600 3.85
2 10/10 1300 3.95
library(sqldf)
Filas diferentes presentes en el df1
sqldf('SELECT * FROM df1 EXCEPT SELECT * FROM df2')
Date Time pH
1 10/9 800 4.05
Filas comunes
sqldf('SELECT * FROM df1 INTERSECT SELECT * FROM df2')
Date Time pH
1 10/8 600 3.85
2 10/10 1300 3.95
Entradas relacionadas
Referencias
No hay comentarios:
Publicar un comentario