【R】重複しているデータの抽出

identical cats

自分の備忘録的な感じになりますが、Rで重複しているデータを抽出する方法です。とてもシンプルで簡単です。

ExcelファイルRStudioを使用しています。

準備: データセットの作成

(データセットが手元に既にある場合は、ここは読み飛ばしてもらって大丈夫です。)

今回の例では、Excelファイルを使用します。

例えばこのサイトでは、洋書で学んだ英単語を1章ずつに分けて投稿しているものがありますが、重複するものが無いようExcelファイルで管理をしています。

今回使用するデータ(Excelファイル)の例

Rでデータセットを読み込む際、ExcelファイルではなくCSVファイルを使いたい場合は、ファイルを保存する際にCSVファイルの形式を選択します。

ちなみに

Excelファイルだけで重複箇所を特定する簡単な方法を主人が教えてくれたので、それもメモにしてみました。興味のある方は合わせてチェックしてみてください。

Related
identical cats
【Excel】重複しているデータの抽出
Excelだけで重複データを確認・表示させる方法についてメモしました。...more  
In Japanese

Rのスクリプト

上記のファイルをRStudioで読み込み、重複の有無を確認します。

library("openxlsx")  # Excelファイルの読み込みができるライブラリ
vocabulary_file <- read.xlsx("/Users/Emma/filename.xlsx")  # Excelファイルを読み込む
head(vocabulary_file)  # 必要に応じてファイルの内容を出力・確認

library("dplyr")  # データの整理に長けたライブラリ
duplicate <- vocabulary_file %>%  # vocabulary_file の中の
    group_by(Word) %>%            # Wordという列 で
    filter(n()>1)                 # 2つ以上同じ値・文字列がある行を抽出

duplicate <- duplicate[order(duplicate$Word),]  # 出力結果が英単語ごとにまとまるよう並び替え
duplicate  # 重複している行の出力

2行目は、read.csv()でCSVファイルを読み込むこともできますが、CSVファイルだとファイルに色をつけた時にその色が保存されないので、私はExcelファイルを使っています。(read.csv()の場合は1行目のライブラリ読み込みは不要) また、ファイルへのパスは人により違います。

10行目のduplicate <- duplicate[order(duplicate$Word),]を入れないと、読み込んだデータの順番のままになり、ちょっと見づらいのでこのコードで並び替えています。今回は対象が英単語なので、アルファベット順になりました。

上記を実行した例はこんな感じになります。

重複しているものがある場合

3つ、重複しているデータを入れてみました。

> duplicate
# A tibble: 6 x 6
# Groups:   Word [3]
  `Ch#` n     Word             PoS   Syn.Rephrase                       Def                 
  <dbl> <chr> <chr>            <chr> <chr>                              <chr>               
1     1 8     dimpled cheeks   n     cheeks have natural dents; dimples えくぼのある頬      
2    99 1     dimpled cheeks   n     cheeks have natural dents; dimples えくぼのある頬      
3     4 14    impeccable (adj) adj   flawless                           非の打ちどころのない
4   100 14    impeccable (adj) adj   flawless                           非の打ちどころのない
5     5 5     initiate (n)     n     a person who has been initiated    新入者              
6   100 5     initiate (n)     n     a person who has been initiated    新入者

ちゃんと重複しているものが出てきてくれました。

重複しているものがない場合

> duplicate
# A tibble: 0 x 6
# Groups:   Word [0]
# … with 6 variables: `Ch#` <dbl>, n <chr>, Word <chr>, PoS <chr>, Syn.Rephrase <chr>, Def <chr>

重複しているデータが無いと、全てコメントアウトの状態で結果が表示されます。

Rを勉強するなら

私はR(RStudio)の勉強にはこちら書籍を使っているのですが、初心者の私でもとても分かりやすくてかなりおすすめです。私はKindle版を使ってデスクトップやパソコン、iPad等で読んでいます。

Andrew P. Beckerman (著), Dylan Z. Childs (著), Owen L. Petchey (著), 富永 大介 (翻訳)

学生のときに少しかじったRはとっても難しそう・めんどくさそうで全然勉強しなかったのですが、バイオインフォマティクスのお手伝いでRを使い出してみたらRのすごさ・便利さが分かり、そして何より面白い・・・

生命科学に限らずマーケティングなどにも利用されているようなので、データ・サイエンスの分野で活躍するには必修かもしれないですね。

\ Share /

Leave a Comment