2013-12-20 7 views
3

두 가지 경우에서 생성 된 두 개의 데이터 프레임이 있지만 동등한 것 같습니다. 둘 다 같은 수의 행과 열을 가지며 시각적으로 행이 정렬되는 방법을 제외하면 동일하게 보입니다.하나의 데이터 프레임이 다른 데이터 프레임의 순서가 맞는지 확인

어느 쪽의 ID 열도 재 배열 할 수 없으므로 가장 가까운 값은 process_number 변수에 고유 한 열을 얻을 수있는 가장 가까운 값입니다. 그러나,이 순서 후에도 identicalFALSE을 산출하고 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" 

답변

3

나는 이러한 경우에 발견 한 가장 좋은 방법은 "비교"패키지를 사용하는 것입니다 문자에 대한 요인 등)를 표시 한 다음 서로 다른 변환 후에 두 입력이 같은지 아닌지에 대한 요약을 제공합니다. 변형이 적용된 후에도 동일하면 변형을 적용하는 데 필요한 변형이 무엇인지 알려줍니다.

+0

필자는 300kx80 데이터 프레임을 확인하기 위해 '비교'하는 데 몇 시간이 걸릴 것이라고 생각했지만 몇 분 만에 흥미로운 결과를 얻었습니다. 허락하면'allowAll' 대신'ignoreOrder'를 사용했지만 어떤 경우이든이 문제를 더 자세히 조사 할 수있었습니다. 감사! –

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 "나는 고유의 열을 얻을 수있는 가장 가까운"고 언급 . 아마도 차이점 중 일부는 서로 다른 방식으로 묶이는 관계와 관련이 있습니다. 정렬 할 수있는 두 번째 열이 있습니까?

0

해결 방법 - 동일하면 merge(df1,df2,by=colnames(df), all = TRUE)은 정확히 df1df2과 동일한 행을 반환해야합니까? 에서 열 유형을 변경하면 allowAll 인수는 열을 재 배열, 행을 재정렬 (예를 들어, 다른 변환을 시도

library(compare) 
compare(df1, df2, allowAll = TRUE) 

:

관련 문제