我有两个数据帧是在两个不同的场合生成的,但我怀疑它们是平等的。两者都具有相同数量的行和列,并且在视觉上它们看起来是相同的,除了行的排序方式。
我也没有可以重新排序的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"
答案 0 :(得分:3)
我发现这些案例的最佳选择是使用“比较”套餐:
library(compare)
compare(df1, df2, allowAll = TRUE)
allowAll
参数尝试不同的转换(例如,重新排序行,重新排序列,将列类型从因子更改为字符等),然后为您提供在不同转换之后是否输入两个输入的摘要是或否相同。如果在应用转换后它们是相同的,它会告诉您需要哪些转换才能使它们相同。
答案 1 :(得分:1)
你的方法是正确的。
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
“是我能找到一个独特列的最接近的”。也许一些差异涉及以不同方式订购的关系。是否有第二列可以排序?
答案 2 :(得分:0)
解决方法 - 如果它们相同,则merge(df1,df2,by=colnames(df), all = TRUE)
应返回与df1
和df2
完全相同的行?