要素が繰り返されているベクトルがあり、各要素が1回だけ表示されるようにそれらを削除したいと思います。
PythonではSet
、これを実現するためにベクトルからを構築できますが、Rでこれを行うにはどうすればよいですか?
要素が繰り返されているベクトルがあり、各要素が1回だけ表示されるようにそれらを削除したいと思います。
PythonではSet
、これを実現するためにベクトルからを構築できますが、Rでこれを行うにはどうすればよいですか?
機能を確認できunique
ます。
> v = c(1, 1, 5, 5, 2, 2, 6, 6, 1, 3)
> unique(v)
[1] 1 5 2 6 3
これは同じことをします。低速ですが、重複の論理ベクトルも必要な場合に役立ちます。
v[duplicated(v)]
隣接する重複要素のみを削除するには、ベクトルをそれ自体のシフトされたバージョンと比較できます。
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