要素が繰り返されるベクターがあり、それらを削除して各要素が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