我有两个数据框是在两个不同的场合生成的,但我怀疑它们是相等的。两者具有相同的行数和列数,并且从视觉上看它们似乎相同,除了行的排序方式。
也没有可以重新排序的 ID 列,我能做的最好的事情就是通过 process_number
变量重新排序,这是我能得到的最接近唯一列的列。但是,即使在重新订购之后identical
也会产生FALSE
,all.equal
给了我这个(总结):
[1] "Component 2: 32 string mismatches"
[16] "Component 18: 'is.NA' value mismatch: 183357 in current 183357 in target"
[23] "Component 27: Mean relative difference: 0.4688722"
[24] "Component 28: Mean relative difference: 0.0004968944"
[26] "Component 30: Attributes: < Component 2: 365 string mismatches >"
[28] "Component 31: 'current' is not a factor"
对于这些情况,我找到的最佳选择是使用"比较"包:
library(compare)
compare(df1, df2, allowAll = TRUE)
allowAll
参数尝试不同的转换(例如,对行重新排序、对列重新排序、将列类型从因子更改为字符等),然后为您提供在不同转换后两个输入是否相同的摘要。如果在应用转换后它们相同,它会告诉您需要哪些转换才能使它们相同。
你的方法是正确的。
all.equal
告诉您,您的数据框不是彼此的重新排序。
有关更多详细信息,请尝试检查
mismatch_in_col_2 <- data1[, 2] != data2[, 2]
cbind(data1[mismatch_in_col_2, 2], data2[mismatch_in_col_2, 2])
(对具有差异的其他列重复此操作。
你提到process_number
"是我能得到的最接近独特专栏的"。 也许其中一些差异与以不同方式排序的关系有关。 是否有可以排序的第二列?
- 如果它们相同,那么merge(df1,df2,by=colnames(df), all = TRUE)
应该返回与df1
和df2
完全相同的行?