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

min*_*nda 46 compare equality r dataframe

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

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

Dav*_*uer 55

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

a <- data.frame(x = 1:10)
b <- data.frame(y = 1:10)
Run Code Online (Sandbox Code Playgroud)

要测试所有值是否相等:

all(a == b) # TRUE
Run Code Online (Sandbox Code Playgroud)

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

identical(a,b) # FALSE: class, colnames, rownames must all match.
Run Code Online (Sandbox Code Playgroud)

  • 如果有人感到困惑,他们就不一样了,因为列名不一样. (4认同)
  • 请注意,要使`same`返回true,不仅值和列名必须匹配,而且行号/名也必须匹配.(这在使用subset()时击中了我;结果是'all`就是我想要的.) (2认同)

Bra*_*orn 14

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

identical(a[, "x"], b[, "y"]) # TRUE
Run Code Online (Sandbox Code Playgroud)


mil*_*lan 7

我们可以使用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.
Run Code Online (Sandbox Code Playgroud)

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

compare(a, b, ignoreNames=T)
#TRUE
#  dropped names
Run Code Online (Sandbox Code Playgroud)

该软件包还有其他有趣的功能,如compareEqualcompareIdentical.