48

要素が繰り返されているベクトルがあり、各要素が1回だけ表示されるようにそれらを削除したいと思います。

PythonではSet、これを実現するためにベクトルからを構築できますが、Rでこれを行うにはどうすればよいですか?

4

3 に答える 3

78

機能を確認できuniqueます。

 > v = c(1, 1, 5, 5, 2, 2, 6, 6, 1, 3)
 > unique(v)
 [1] 1 5 2 6 3
于 2012-05-26T20:54:19.353 に答える
11

これは同じことをします。低速ですが、重複の論理ベクトルも必要な場合に役立ちます。

v[duplicated(v)]
于 2013-08-22T01:55:12.410 に答える
7

隣接する重複要素のみを削除するには、ベクトルをそれ自体のシフトされたバージョンと比較できます。

v <- c(1, 1, 5, 5, 5, 5, 2, 2, 6, 6, 1, 3, 3)
v[c(TRUE, !v[-length(v)] == v[-1])]
[1] 1 5 2 6 1 3

同じことは、dplyrを使用してもう少しエレガントに書くことができます:

library(dplyr)
v[v != lag(v)]
[1] NA  5  2  6  1  3

lag()によって返されるNAは最初の値を削除します。最初の値を保持するために、デフォルトを最初の値とは異なる値に変更できます。

v[v != lag(v, default = !v[1])]
[1] 1 5 2 6 1 3
于 2018-08-23T09:42:38.783 に答える