2013-10-17 16 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

谢谢你们两位!有用 –