58

如何检查两个对象(例如数据帧)在 R 中的值是否相等?

通过值相等,我的意思是一个数据帧的每一列的每一行的值等于第二个数据帧中相应行和列的值。

4

4 回答 4

67

目前尚不清楚测试两个数据帧是否“值相等”是什么意思,但要测试值是否相同,以下是两个值相等的不同数据帧的示例:

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

要测试所有值是否相等:

all(a == b) # TRUE

要测试对象是否相同(它们不是,它们具有不同的列名):

identical(a,b) # FALSE: class, colnames, rownames must all match.
于 2012-05-14T23:50:01.553 回答
14

此外,相同仍然有用并支持实际目标:

identical(a[, "x"], b[, "y"]) # TRUE
于 2014-02-27T04:09:19.823 回答
9

我们可以使用 R 包compare来测试对象的名称和值是否相同,只需一步。

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.

如果我们只关心值的相等性,我们可以设置ignoreNames=TRUE

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

该软件包具有其他有趣的功能,例如compareEqualcompareIdentical

于 2016-06-17T03:43:27.297 回答
0

无需依赖另一个包,而是比较两个数据集的结构(类和属性):

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)
于 2020-11-11T12:37:27.947 回答