Compare if two dataframe objects in R are equal?

2019-02-01 09:28发布

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.

3条回答
三岁会撩人
2楼-- · 2019-02-01 09:59

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.
查看更多
神经病院院长
3楼-- · 2019-02-01 10:04

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

identical(a[, "x"], b[, "y"]) # TRUE
查看更多
淡お忘
4楼-- · 2019-02-01 10:14

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.

查看更多
登录 后发表回答