Rのtidyverse:行の重複削除「distinct」の使い方

スポンサーリンク

バイオインフォマティクスの分野では、大量のデータを処理・解析するためにRのtidyverseパッケージ群が頻繁に活用されます。特に、データの整理やフィルタリングに便利なdplyrパッケージは、遺伝子発現データやゲノムデータの解析において強力なツールとなります。

本記事では、dplyrdistinct()関数について、バイオインフォマティクスでの基本的な使い方を解説します。


1. distinct()の基本

distinct()とは?

distinct()関数は、データフレーム(またはtibble)から重複する行を削除し、ユニークな行のみを取得するための関数です。SQLのSELECT DISTINCTと同様の機能を持ちます。

基本的な使い方

まずは、tidyverseをインストール&ロードします。

install.packages("tidyverse")  # 未インストールの場合
library(tidyverse)

次に、例としてDNA配列のサンプルデータを作成します。

df <- tibble(
  sample_id = c(1, 1, 2, 2, 3, 3, 4),
  gene = c("BRCA1", "BRCA1", "TP53", "TP53", "EGFR", "EGFR", "MYC"),
  expression = c(2.3, 2.3, 5.1, 5.1, 3.6, 3.6, 4.2)
)

df

このデータフレームには、サンプルごとに遺伝子の発現データが含まれていますが、重複した行があります。これをdistinct()でユニークな行にします。

df_distinct <- distinct(df)
df_distinct

実行結果:

# A tibble: 4 × 3
  sample_id gene  expression
      <dbl> <chr>      <dbl>
1         1 BRCA1       2.3
2         2 TP53        5.1
3         3 EGFR        3.6
4         4 MYC         4.2

このように、重複していた行が削除され、ユニークなデータのみが残ります。


2. 特定の列を基準にdistinct()

例:遺伝子リストからユニークな遺伝子名のみを取得

特定の列だけを対象にして重複を削除することも可能です。例えば、遺伝子名 (gene 列) がユニークであるデータを取得するには、以下のように記述します。

df_gene_unique <- distinct(df, gene, .keep_all = TRUE)
df_gene_unique

.keep_all = TRUE を指定すると、gene 列がユニークな行を取得しつつ、その他の列の情報も保持します。

実行結果:

# A tibble: 4 × 3
  sample_id gene  expression
      <dbl> <chr>      <dbl>
1         1 BRCA1       2.3
2         2 TP53        5.1
3         3 EGFR        3.6
4         4 MYC         4.2

このように、各遺伝子が最初に登場した時点の行が残ります。


3. distinct()の応用:バイオインフォマティクスでの活用

3.1 変異データの整理

ゲノム変異データを扱う際、特定の変異のみを抽出したい場合にdistinct()が便利です。例えば、以下のような変異データがあるとします。

mutations <- tibble(
  patient_id = c(1, 1, 2, 2, 3, 4, 4),
  gene = c("TP53", "TP53", "BRCA1", "BRCA1", "EGFR", "MYC", "MYC"),
  mutation_type = c("missense", "missense", "frameshift", "frameshift", "nonsense", "splice", "splice")
)

mutations_unique <- distinct(mutations, gene, mutation_type, .keep_all = TRUE)
mutations_unique

このコードは、重複した変異タイプを除外し、ユニークな遺伝子-変異タイプの組み合わせを取得します。


3.2 RNAシーケンスデータの整理

RNAシーケンス解析では、各遺伝子の発現値を解析しますが、同じ遺伝子が複数回記録されることがあります。遺伝子ごとに一意な値を取得するためにdistinct()を活用できます。

rna_data <- tibble(
  gene = c("BRCA1", "TP53", "TP53", "EGFR", "MYC", "MYC"),
  expression = c(2.1, 5.5, 5.5, 3.3, 4.0, 4.0),
  sample_id = c(1, 2, 2, 3, 4, 4)
)

rna_unique <- distinct(rna_data, gene, .keep_all = TRUE)
rna_unique

このコードでは、各遺伝子ごとに一つのデータを保持し、重複を排除できます。


3.3 メタデータのクリーンアップ

バイオインフォマティクスの解析では、複数のデータソースを統合する際に、重複エントリーが発生することがあります。例えば、患者データのメタ情報が以下のようになっている場合:

patients <- tibble(
  patient_id = c(1, 1, 2, 2, 3, 4),
  age = c(45, 45, 50, 50, 38, 60),
  gender = c("M", "M", "F", "F", "F", "M")
)

patients_unique <- distinct(patients, patient_id, .keep_all = TRUE)
patients_unique

この処理を行うことで、患者ごとに一意なレコードを取得できます。


まとめ

distinct()は、データをクリーンアップし、ユニークなエントリーを抽出する際に非常に便利な関数です。バイオインフォマティクスにおいても、以下のような場面で活用できます!!

  1. ゲノム変異データの整理(特定の遺伝子-変異タイプの一意な組み合わせ)
  2. RNAシーケンスデータの整理(各遺伝子ごとの代表データを取得)
  3. メタデータのクリーンアップ(重複患者情報の削除)

データ解析の効率を向上させるために、ぜひdistinct()を活用してみてくださいね〜!

タイトルとURLをコピーしました