バイオインフォマティクスの分野では、大量のデータを処理・解析するためにRのtidyverseパッケージ群が頻繁に活用されます。特に、データの整理やフィルタリングに便利なdplyrパッケージは、遺伝子発現データやゲノムデータの解析において強力なツールとなります。
本記事では、dplyrのdistinct()
関数について、バイオインフォマティクスでの基本的な使い方を解説します。
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()
は、データをクリーンアップし、ユニークなエントリーを抽出する際に非常に便利な関数です。バイオインフォマティクスにおいても、以下のような場面で活用できます!!
- ゲノム変異データの整理(特定の遺伝子-変異タイプの一意な組み合わせ)
- RNAシーケンスデータの整理(各遺伝子ごとの代表データを取得)
- メタデータのクリーンアップ(重複患者情報の削除)
データ解析の効率を向上させるために、ぜひdistinct()
を活用してみてくださいね〜!