r语言 - 检查一个数据框是否是另一个数据框的重新排序



我有两个数据框是在两个不同的场合生成的,但我怀疑它们是相等的。两者具有相同的行数和列数,并且从视觉上看它们似乎相同,除了行的排序方式。

也没有可以重新排序的 ID 列,我能做的最好的事情就是通过 process_number 变量重新排序,这是我能得到的最接近唯一列的列。但是,即使在重新订购之后identical也会产生FALSEall.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)应该返回与df1df2完全相同的行?

相关内容

  • 没有找到相关文章

最新更新