检查一个数据帧是否是另一个数据帧的重新排序

时间:2013-12-20 14:39:18

标签: r sorting compare dataframe

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

我也没有可以重新排序的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"

3 个答案:

答案 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)应返回与df1df2完全相同的行?