Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 检查一个数据帧是否是另一个数据帧的重新排序_R_Sorting_Compare_Dataframe - Fatal编程技术网

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

R 检查一个数据帧是否是另一个数据帧的重新排序,r,sorting,compare,dataframe,R,Sorting,Compare,Dataframe,我有两个数据帧是在两种不同的情况下生成的,但我怀疑它们是相等的。两者的行数和列数相同,从视觉上看,它们似乎是相同的,只是行的顺序不同 两者都没有可以重新排序的ID列,我能做的最好是通过process\u number变量重新排序,这是我能得到的最接近唯一列的变量。然而,即使在重新排序之后,idential也会产生FALSE,而all.equal会给出以下信息(总结): [1]“组件2:32个字符串不匹配” [16] “组件18:'is.NA'值不匹配:目标中当前183357中的183357” [

我有两个数据帧是在两种不同的情况下生成的,但我怀疑它们是相等的。两者的行数和列数相同,从视觉上看,它们似乎是相同的,只是行的顺序不同

两者都没有可以重新排序的ID列,我能做的最好是通过
process\u number
变量重新排序,这是我能得到的最接近唯一列的变量。然而,即使在重新排序之后,
idential
也会产生
FALSE
,而
all.equal
会给出以下信息(总结):

[1]“组件2:32个字符串不匹配”
[16] “组件18:'is.NA'值不匹配:目标中当前183357中的183357”
[23]“第27部分:平均相对差异:0.4688722”
[24]“第28部分:平均相对差异:0.0004968944”
[26]“组件30:属性:<组件2:365字符串不匹配>”
[28]“组成部分31:‘当前’不是一个因素”

您的方法是正确的

all.equal
告诉您,您的数据帧不是彼此的重新排序

有关详细信息,请尝试检查

mismatch_in_col_2 <- data1[, 2] != data2[, 2]
cbind(data1[mismatch_in_col_2, 2], data2[mismatch_in_col_2, 2])

解决方法中的
不匹配\u col\u 2如果它们相同,那么
合并(df1,df2,by=colnames(df,all=TRUE)
应该返回与
df1
df2
完全相同的行?

对于这些情况,我发现的最佳选择是使用“比较”包:


allowAll
参数尝试不同的转换(例如,对行重新排序、对列重新排序、将列类型从因子更改为字符等),然后提供不同转换后两个输入是否相同的摘要。如果在应用转换后它们是相同的,它会告诉您需要哪些转换才能使它们相同。

我认为
compare
检查我的300k×80数据帧需要几个小时,但它在几分钟内就产生了一个有趣的输出。诚然,我使用了
ignoreOrder
而不是
allowAll
,但无论如何,这有助于我进一步调查问题。谢谢
mismatch_in_col_2 <- data1[, 2] != data2[, 2]
cbind(data1[mismatch_in_col_2, 2], data2[mismatch_in_col_2, 2])
library(compare)
compare(df1, df2, allowAll = TRUE)