Compare if two dataframe objects in R are equal?

RDataframeCompareEquality

R Problem Overview


How do I check if two objects, e.g. dataframes, are value equal in R?

By value equal, I mean the value of each row of each column of one dataframe is equal to the value of the corresponding row and column in the second dataframe.

R Solutions


Solution 1 - R

It is not clear what it means to test if two data frames are "value equal" but to test if the values are the same, here is an example of two non-identical dataframes with equal values:

a <- data.frame(x = 1:10)
b <- data.frame(y = 1:10)

To test if all values are equal:

all(a == b) # TRUE

To test if objects are identical (they are not, they have different column names):

identical(a,b) # FALSE: class, colnames, rownames must all match.

Solution 2 - R

In addition, identical is still useful and supports the practical goal:

identical(a[, "x"], b[, "y"]) # TRUE

Solution 3 - R

We can use the R package compare to test whether the names of the object and the values are the same, in just one step.

a <- data.frame(x = 1:10)
b <- data.frame(y = 1:10)

library(compare)
compare(a, b)
#FALSE [TRUE]#objects are not identical (different names), but values are the same.

In case we only care about equality of the values, we can set ignoreNames=TRUE

compare(a, b, ignoreNames=T)
#TRUE
#  dropped names

The package has additional interesting functions such as compareEqual and compareIdentical.

Solution 4 - R

Without the need to rely on another package, but to compare structure (class and attributes) of two data sets:

structure_df1 <- sapply(df1, function(x) paste(class(x), attributes(x), collapse = ""))
structure_df2 <- sapply(df2, function(x) paste(class(x), attributes(x), collapse = ""))

all(structure_df1 == structure_df2)

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionmindless.pandaView Question on Stackoverflow
Solution 1 - RDavid LeBauerView Answer on Stackoverflow
Solution 2 - RBrad HornView Answer on Stackoverflow
Solution 3 - RmilanView Answer on Stackoverflow
Solution 4 - RMS BerendsView Answer on Stackoverflow