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()删除了所有重复的对:

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

如何获取“ft”中每对的删除位置的索引,以便我可以将其从“dist”中删除,在这种情况下为 2。

4

1 回答 1

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
于 2013-10-17T22:17:33.297 回答