2012-03-30 37 views
45

我有一個大於100列的數據框,並且我只通過比較兩列來找到唯一的行。我希望這是一個容易的,但我不能與uniqueduplicated我自己的工作。對於只有選定列的數據幀是唯一的

在下文中,我想獨特僅使用ID和ID2:

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 

(我沒有偏好哪個獨特的行保留)

+0

所需輸出沒有很好地限定。你如何選擇包含x而不是y?這個決定將需要爲每一個重複行的每一列做出,並且你沒有給出如何去做的指示。 – joran 2012-03-30 14:33:39

+0

我不在乎是否包含'x'或'y'。我會更新這個問題。 – Ina 2012-03-30 14:34:14

回答

77

好吧,如果這並不重要的價值在您選擇的非重複列,這應該是很容易的:

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 2017-04-10 13:08:33

+0

@Ferroao根據這個網站,這是不可能在SQL http://www.dofactory.com/sql/select-distinct – 2017-10-18 19:22:10

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")])),] 
相關問題