我有一个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()
删除所有重复的对:
> unique(ft)
from to
1 1 1
3 2 2
4 4 3
5 3 5
如何获取“ft”中每一对的去除位置的索引,以便我可以将其从“dist”中删除,在这种情况下为2。
答案 0 :(得分:2)
正如@eddi所说,您可以获得一个逻辑向量,指示哪些行与duplicated()
重复。我将其与which()
相结合,后者返回与逻辑TRUE
相关联的数字(即重复行)。然后,您可以使用data.frame
创建新的vector
(-
等),以便不在对象的下标中包含指定的行。
编辑:在评论中,@ 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