読者です 読者をやめる 読者になる 読者になる

いずにゃんの研究日記

専門性を広げるための練習場

はじめてのdplyr(4):キー変数で2つのデータを横に連結する

R

タイトルはdplyrであるが,RStudioを起動したら迷わず,関連パッケージを一気に読み込んでくれるtidyverseパッケージをロードすればよい。

library(tidyverse)


2つのデータの作成

過去の記事,

で紹介してきたデータセットは,Aqoursメンバーの名前という共通した変数nameがある。今回はnameをキー変数として,2つのデータを横に連結してみる。まずはデータを以下に再掲。

dat <-
  data_frame(
    name=c("高海千歌","桜内梨子","松浦果南","黒澤ダイヤ","渡辺曜","津島善子","国木田花丸","小原鞠莉","黒澤ルビィ"),
    grade=c(2,2,3,3,2,1,1,3,1), #学年
    height=c(157,160,162,162,157,156,152,163,154), #身長
    B=c(82,80,83,80,82,79,83,87,76), #バスト
    W=c(59,58,58,57,57,58,57,60,56), #ウエスト
    H=c(83,82,84,80,81,80,83,84,79)  #ヒップ
  )
dat
# A tibble: 9 × 6
        name grade height     B     W     H
       <chr> <dbl>  <dbl> <dbl> <dbl> <dbl>
1   高海千歌     2    157    82    59    83
2   桜内梨子     2    160    80    58    82
3   松浦果南     3    162    83    58    84
4 黒澤ダイヤ     3    162    80    57    80
5     渡辺曜     2    157    82    57    81
6   津島善子     1    156    79    58    80
7 国木田花丸     1    152    83    57    83
8   小原鞠莉     3    163    87    60    84
9 黒澤ルビィ     1    154    76    56    79

次はメンバーの名前とトリオユニット名のデータを作る。片方のデータにしかない行も追加して動きを確認してみたいため,2つ目のデータではAqoursメンバーに加えうちっちーも加えてみる。

dat_tu <-
  data_frame(
    name=c("高海千歌","桜内梨子","松浦果南","黒澤ダイヤ","渡辺曜","津島善子",
           "国木田花丸","小原鞠莉","黒澤ルビィ","うちっちー"),
    group=c("CYaRon!","Guilty Kiss","AZALEA","AZALEA","CYaRon!","Guilty Kiss",
            "AZALEA","Guilty Kiss","CYaRon!","solo") 
  )
dat_tu
# A tibble: 10 × 2
         name       group
        <chr>       <chr>
1    高海千歌    CYaRon!
2    桜内梨子 Guilty Kiss
3    松浦果南      AZALEA
4  黒澤ダイヤ      AZALEA
5      渡辺曜    CYaRon!
6    津島善子 Guilty Kiss
7  国木田花丸      AZALEA
8    小原鞠莉 Guilty Kiss
9  黒澤ルビィ    CYaRon!
10 うちっちー        solo


2つのデータの連結

それでは,名前を示している変数nameをキーとして,datデータにdat_tuの情報を横に連結してみる。datにない行もすべて追加するために,full_join()関数を使う。

dat_all <- full_join(dat,dat_tu,by="name")
dat_all
# A tibble: 10 × 7
         name grade height     B     W     H       group
        <chr> <dbl>  <dbl> <dbl> <dbl> <dbl>       <chr>
1    高海千歌     2    157    82    59    83    CYaRon!
2    桜内梨子     2    160    80    58    82 Guilty Kiss
3    松浦果南     3    162    83    58    84      AZALEA
4  黒澤ダイヤ     3    162    80    57    80      AZALEA
5      渡辺曜     2    157    82    57    81    CYaRon!
6    津島善子     1    156    79    58    80 Guilty Kiss
7  国木田花丸     1    152    83    57    83      AZALEA
8    小原鞠莉     3    163    87    60    84 Guilty Kiss
9  黒澤ルビィ     1    154    76    56    79    CYaRon!
10 うちっちー    NA     NA    NA    NA    NA        solo

一方,うちっちーはデータに謎が多すぎるから今回は連結しません,という場合はleft_join()関数を使って,datの方にある名前のみと連結させるとよい。

dat_aqours <- left_join(dat,dat_tu,by="name")
dat_aqours
# A tibble: 9 × 7
        name grade height     B     W     H       group
       <chr> <dbl>  <dbl> <dbl> <dbl> <dbl>       <chr>
1   高海千歌     2    157    82    59    83    CYaRon!
2   桜内梨子     2    160    80    58    82 Guilty Kiss
3   松浦果南     3    162    83    58    84      AZALEA
4 黒澤ダイヤ     3    162    80    57    80      AZALEA
5     渡辺曜     2    157    82    57    81    CYaRon!
6   津島善子     1    156    79    58    80 Guilty Kiss
7 国木田花丸     1    152    83    57    83      AZALEA
8   小原鞠莉     3    163    87    60    84 Guilty Kiss
9 黒澤ルビィ     1    154    76    56    79    CYaRon!