2013-10-17 48 views
3

我有一個2列的數據框和一個相同長度的向量。我試圖刪除數據框中的所有重複對以及相同的索引,將其從矢量中刪除。查找刪除的唯一對的索引

我有一個數據幀:

> from <- c(1,1,2,4,3) 
> to <- c(1,1,2,3,5) 
> ft <- data.frame(from,to) 
> ft 
from to 
1 1 1 
2 1 1 
3 2 2 
4 4 3 
5 3 5 

和矢量:

> dist <- c(1,2,3,4,5) 
> dist 
[1] 1 2 3 4 5 

我使用的唯一的()函數刪除所有複製對:

> unique(ft) 
    from to 
1 1 1 
3 2 2 
4 4 3 
5 3 5 

我怎樣才能得到從「ft」中刪除的每一對的索引,以便我可以將它從「dist」中刪除,這將是該cas中的2即

+2

看'duplicated' – eddi

+0

'這(重複(英尺))' –

回答

2

作爲@eddi筆記,您可以得到一個邏輯向量,指示哪些行與duplicated()重複。我將它與which()相結合,它返回與TRUE(即重複行)邏輯關聯的數字。然後,您可以使用-創建新的data.framevector等),以便不在對象的下標中包含指定的行。

編輯:在評論中,@DWin指出比使用-更好的方法。如果我們否定duplicated()功能與!,我們將得到一個載體,我們可以用它來確定哪些行至保留

> from <- c(1,1,2,4,3) 
> to <- c(1,1,2,3,5) 
> ft <- data.frame(from,to) 
> ft 
    from to 
1 1 1 
2 1 1 
3 2 2 
4 4 3 
5 3 5 
> dist <- c(1,2,3,4,5) 
> dist 
[1] 1 2 3 4 5 
> remove <- !duplicated(ft) 
> remove 
[1] TRUE FALSE TRUE TRUE TRUE 
> ft.new <- ft[which(remove), ] 
> ft.new 
    from to 
1 1 1 
3 2 2 
4 4 3 
5 3 5 
> dist.new <- dist[which(remove)] 
> dist.new 
[1] 1 3 4 5 
+0

- ?哪個()是一個危險的建築。嘗試在沒有匹配行的情況下:'from < - c(1,1,2,4,3);至< - c(1,1.1,2,3,5)'...'ft.new# [1] from至 <0 rows>(或0長度row.names)''。構建一個子集或使用'!duplicated()' –

+0

@DWin,謝謝你的提示。我已經更新了我的答案。 – gung

+0

謝謝你們兩位!有用 –