アメリエフの技術ブログ

Amelieff Staff Blog

重複値の削除や抽出

Rで、ベクトルなどに含まれる重複した値をユニークにしたいとき、unique()を使用します。
> a
[1] "AAA" "BBB" "CCC" "AAA"
> unique(a)
[1] "AAA" "BBB" "CCC"

linuxコマンドの、隣り合っている重複行をユニークにするuniqコマンドとよく混同して、uniqと書いてしまうのは私だけでしょうか。
$ cat file.txt
cat
cat
dog
mouse
$ uniq file.txt
cat
dog
mouse

linuxのuniqコマンドでは「-d」オプションで重複している値を取得することができます。
$ uniq -d file.txt
cat

これが頭にあった私は、Rのunique()でも同じようにオプションで指定するのだろうと思い込み、unique()のヘルプを舐めるように読みましたが、そんなオプションはありませんでした。
しかしRのヘルプは親切なので、一番最後の方で、「重複した値の取得にはduplicated()を使えるよ!」と教えてくれていました。助かります。
duplicated()は、真偽値を返します。要素が1つしかないときはFALSE、同じ要素が2回以上出現するとき、2回目以降の要素についてTRUEを返します。

> a
[1] "AAA" "BBB" "CCC" "AAA"
> duplicated(a)
[1] FALSE FALSE FALSE TRUE
> a[duplicated(a)]
[1] "AAA"