「計算用の数値を含むデータ」と、「各行を説明する名前 (symbol) や説明の文章などのデータ」という2つのテーブル同士を、それぞれに含まれる共通の列をキーに連結させたいことは、よくある処理だと思います。
このようなとき、R の tidyverse では、 inner_join() 関数を用いて、簡単に結合することができます。
例えば、下記のように2つのテーブルを読み込んだとします。
library(tidyverse)
input_data <- read_tsv("input_data.tsv")
meta_data <- read_tsv("meta_data.tsv")
テーブルの中身は、下記のようなイメージです。2つのファイルも1列目に id の列を持ちます。
> # 計算用のデータ。
> input_data
# A tibble: 3 x 3
Id Sample1 Sample2
<chr> <dbl> <dbl>
1 id1 1 4
2 id2 2 5
3 id3 3 6
>
>
>
> # 各行を説明するデータ。アノテーションの情報など。
> meta_data
# A tibble: 4 x 3
Id Symbol Description
<chr> <chr> <chr>
1 id1 AAA lorem ipsum a
2 id2 BBB lorem ipsum b
3 id3 CCC lorem ipsum c
4 id4 DDD lorem ipsum d
2つのテーブルの共通な列である Id をもとに、テーブルを結合するには、下記のように書けます。
result_data <- inner_join(input_data, meta_data)
実行結果は、下記のようになります。
> result_data <- inner_join(input_data, meta_data)
Joining, by = "Id"
> result_data
# A tibble: 3 x 5
Id Sample1 Sample2 Symbol Description
<chr> <dbl> <dbl> <chr> <chr>
1 id1 1 4 AAA lorem ipsum a
2 id2 2 5 BBB lorem ipsum b
3 id3 3 6 CCC lorem ipsum c
Joining, by = “Id” となっていることで、 Id 列をもとに結合されたことが分かります。この場合は、2つのテーブルに同じ名前の列があるので、自動的に認識されています。明示的にキーの列を指定する場合は、inner_join(input_data, meta_data, by = "Id")
と書きます。
また、結果のテーブル (result_data) では、元の input_data に含まれない id4 の行がないことが確認できます。