2016-10-07 3 views
0

데이터 프레임이 있으며 행에 "유사 유사"한 두 값에 따라 삭제해야합니다. 나는 다르지만 동일하지 않은 관측치 만 삭제하면됩니다. 나는 이것을 agrep을 사용하여 시도하지만이 기능은 동일한 관찰을 삭제합니다. 상기의 dataframe조건부 행 삭제 : 동일하지 않은 유사 유사 행을 삭제하십시오.

Id<-c("RoLu1976","Rolu1976","RoLu1976","AlBl1989","ThSa1996") 
Art<-c("Econometric Policy Evaluation: A Critique","Econometric Policy Evaluations A Critique","Econometric Policy Evaluation: A Critique", "Rules after discretion", "Expectations and the Nonneutrality of Lucas") 
Id.1<-c("FiKy1989","FiKy1989","BeBe1983","JoSt1989","JoSt1990") 
Art.1<-c("Notes on the Lucas Critique","Notes on the Lucas Critique","The Inconsistency of Optimal Plans","The Inconsistency","Notes on the Lucas") 
N<-data.frame(Id,Art,Id.1,Art.1) 

준 동일한 값은 s: 및 A에 대한 다른 2 명 개의 제 1 관찰 Art 열이다. 내가 this이었다 무슨 짓을

Id  Art           Id.1  Art.1 
RoLu1976 Econometric Policy Evaluation: A Critique FiKy1989 Notes on the Lucas Critique 
RoLu1976 Econometric Policy Evaluation: A Critique BeBe1983 The Inconsistency of Optimal Plans 
AlBl1989 Rules after discretion      JoSt1989 The Inconsistency 
ThSa1996 Expectations and the Nonneutrality of Lucas JoSt1990 Notes on the Lucas 

: 위의 경우

최종 데이터 프레임 (동일한 값이 삭제되지 않았 음을 유의)해야한다

yy = NULL 
for(i in 1:length(N$Art)){ 
    temp = agrep(N[i,"Art"],N$Art,value=T) 
    y = ifelse(any(N[i,"Art"]==temp),temp[1],N[i,"Art"]) 
    yy = c(yy,y) 
} 
N$Art = yy 
N.2 = N[!duplicated(N$Art), ] 

그러나 그것은 모두 삭제 값 : 동일하고 유사합니다.

어떻게하면됩니까?

+0

"Art"열에 만 기준을 적용 하시겠습니까? 원래 'N'의 두 번째 행에 'Art.1'이있는 것으로 가정합니다. "Foobar"(즉, 다른 "중복"중 하나의 "Art.1"과 다릅니다). 그래도 그걸 버리시겠습니까? –

+0

@ mathematical.coffee "Art"열은 유사하지만 아트 1 (또는 다른 열)과 동일하지만 "Art"(동일하지 않음)의 모든 준 유사 값을 삭제하지만 "Art1"과 동일합니다. – Dan

답변

3

원래 아트 열에있는 것과 동일한 항목의 색인을 저장하고 중복 제거 후 결과와 함께 사용할 수 있습니다 (예 :

originallyDuplicated <- duplicated(N$Art) 
# then run your snippet to generate `yy` 

그래서 당신은 지금중복되는 것을 제거하기를 원하지만 원래하지 . 다른 곳은 행의 모든 열 중복 (또는 거의 중복) 된 경우 그 오히려 Art 열 순전히 당신의 제외 기준을 내놓고보다, 그것은 행을 제외하는 것이 더 나을 것 같다 나에게 있지만

N[!(duplicated(yy) & !originallyDuplicated),] 

테이블에. (예 : Art.1, Id.1, ID 등도 비교하십시오.)

+0

"N"에 동일한 오타가 여러 개있는 경우 (예 : 두 개의 "계량 경제 정책 평가"가 있다고합시다.) - 어느 것이 "복제본"인지와 "원본"인가? –

+0

둘 중 하나는 "원본"역할을 할 수 있습니다. 문제는 - 두 가지 모두 "다르다"- 다른 열은 동일하므로 값이 두 번 계산됨을 의미합니다. – Dan

+0

@ mathematical.cofee 맞습니다. 데이터 프레임에 "유사합니다"여러 값이있는 경우 유사 값만 삭제되고 다른 값은 원래 형식으로 변경됩니다. – Dan