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.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
于 2013-10-17T22:17:33.297 に答える