【发布时间】:2013-10-07 19:09:00
【问题描述】:
假设我在 R 中有大型数据集,我只想知道其中两个是否相同。当我尝试不同的算法以达到相同的结果时,我经常使用它。例如,假设我们有以下数据集:
df1 <- data.frame(num = 1:5, let = letters[1:5])
df2 <- df1
df3 <- data.frame(num = c(1:5, NA), let = letters[1:6])
df4 <- df3
这就是我用来比较它们的方法:
table(x == y, useNA = 'ifany')
当数据集没有 NA 时效果很好:
> table(df1 == df2, useNA = 'ifany')
TRUE
10
但当他们有 NA 时就没有那么多了:
> table(df3 == df4, useNA = 'ifany')
TRUE <NA>
11 1
在示例中,很容易将NA 视为没有问题,因为我们知道两个数据帧是 相等的。问题是NA == <anything> 产生NA,所以只要其中一个数据集有一个NA,另一个在同一位置有什么并不重要,结果总是NA。
所以使用table() 来比较数据集对我来说似乎并不理想。 如何更好地检查两个数据框是否相同?
P.S.:请注意,这不是 R - comparing several datasets、Comparing 2 datasets in R 或 Compare datasets in R 的副本
【问题讨论】:
-
identical(df1,df2) -
@Frank,我相信解决方案很常见,问题也大致相同(我们先不讨论矩阵和数据框之间差异的语义)。但是,为了帮助将来的搜索,我认为应该保留两个 Q。顺便说一句,您的链接针对同一页面,这是另一个问题的 URL:stackoverflow.com/questions/11767851/…
-
是的,我的意思是我们可以将其标记为欺骗,只是因为它来得较晚。你有答案,所以我想你不会介意的。如果您同意,您可以将其标记为受骗关闭,或者我可以开始投票。 (没有一个开始。)
-
@Frank:好吧,我会做的。现在是harakiri时间!
-
dplyr::all_equal()具有忽略列和行顺序以及将类从因子转换为字符以及将整数转换为双精度的参数。
标签: database r dataset compare dataframe