比较R中的两个数据帧对象是否相等?

时间:2012-05-14 22:59:53

标签: r dataframe compare equality

如何检查两个对象,例如数据帧在R?

中的值相等

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

4 个答案:

答案 0 :(得分:52)

目前尚不清楚测试两个数据帧是否“值相等”但测试值是否相同意味着什么,这里是两个具有相同值的不相同数据帧的示例:

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.

答案 1 :(得分:12)

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

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

答案 2 :(得分:6)

我们可以使用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

答案 3 :(得分: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)