2012-03-30 17 views
45

私は> 100列のデータフレームを持っていますが、私は2つの列を比較することでユニークな行を探します。私はこれが簡単だと思っていますが、uniqueまたはduplicatedと一緒に働くことはできません。私はどちらか得たい選択した列のみを持つデータフレームで一意です

data.frame(id=c(1,1,3),id2=c(1,1,4),somevalue=c("x","y","z")) 

id id2 somevalue 
1 1   x 
1 1   y 
3 4   z 

id id2 somevalue 
1 1   x 
3 4   z 

または:

id id2 somevalue 
1 1   y 
3 4   z 

(以下で

、Iは、固有のIDのみとID2を使用したいと思い私は一意の行のどれが保持されているかを好みません)

+0

希望出力が明確に定義されません。あなたはxを含むが、yは含まないことをどのように選択しますか?この決定は、繰り返される行のすべての列に対して行う必要があります。また、どのように行うかについての指示はありません。 – joran

+0

私は「x」か「y」のどちらが含まれているかを好みません。私は質問を更新します。 – Ina

答えて

77

それはあなたが選択した非重複欄にその値が関係ないならば、これはかなり簡単なはず、OK:

dat <- data.frame(id=c(1,1,3),id2=c(1,1,4),somevalue=c("x","y","z")) 
> dat[!duplicated(dat[,c('id','id2')]),] 
    id id2 somevalue 
1 1 1   x 
3 3 4   z 

duplicatedコールの中では、私は単純にdatことからカラムだけを渡しています私は重複したくない。このコードでは、最初にが最初にの曖昧な値を自動的に選択します。 (この場合、X。)

+0

データシートのバージョンは – Ferroao

+0

です@Ferroaoこのウェブサイトによると、SQLではできませんhttp://www.dofactory.com/sql/select-distinct –

8

unique()使用:

dat <- data.frame(id=c(1,1,3),id2=c(1,1,4),somevalue=c("x","y","z"))  
dat[row.names(unique(dat[,c("id", "id2")])),] 
関連する問題