2016-10-07 5 views
0

データフレームがあります。行内の「準同一」の2つの値に基づいて削除する必要があります。私は違うが、同じではない観測を削除するだけです。私は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:ための異なる2つの第一の観察に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

条件を「アート」列にのみ設定してもよろしいですか?元の「N」の2行目に「Art.1」があるとします。 "Foobar"(すなわち、他の "複製物"のいずれかの "Art.1"とは異なる)。あなたはまだそれをドロップしたいですか? –

+0

@ mathematical.coffee "Art"の列は、 "Art.1"(または他の列)でquiasi-identicalですが同一ですが、 "Art"(全く同じではない)のすべての準同一値を削除します。 「Art1」と同じです。 – Dan

答えて

3

元のアートコラムで同じもののインデックスを保存し、重複除外後の結果と組み合わせて使用​​することができます。

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

だから今はなく、もともとを重複しているものを取り除きたいです。

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

私にはArt列に純粋に自分の除外基準を基づかではなく、そのようだけど、行のすべての列が別の場所に複製(またはほとんど重複した)場合、行を除外するために、より理にかなってテーブルに(Art.1、Id.1、IDなどの列も比較してください)

+0

「N」に同じタイプミスが複数ある場合(たとえば、2つの「計量経済的評価」があるとします)、どのようなものが「重複」であり、どちらが「オリジナル」ですか? –

+0

いずれかが「オリジナル」として機能することができますが、問題は両方とも「異なっている」 - 他の列は同じです。つまり、値が2回カウントされます。 – Dan

+0

@ mathematical.cofeeあなたは正しいです。データフレームに「準同一」の値がいくつかある場合は、準同一の値のうちの1つだけを削除し、他の値は元のフォームに変更します。 – Dan

関連する問題