バイオインフォマティクスの分野でRを活用する際、tidyverseパッケージはデータ解析や可視化を効率的に行うための強力なツールキットです。その中でも「dplyr」は、データの操作をシンプルかつ直感的に行うことができ、多くの研究者に愛用されています。
この記事では、特にdplyrの「count」関数に注目し、その基本的な使い方から応用的なテクニックまでを解説します。バイオインフォマティクスの具体的なデータ例も交えながら、実践的な利用方法を学んでいきましょう。
dplyr の count 関数の基本
count
関数の概要count
関数は、データフレームの指定した列に基づいて値の頻度を数え、新しいデータフレームとして結果を返します。これは、データ内のカテゴリの分布を理解したり、重要な傾向を見つけたりするのに役立ちます。
基本的な構文は以下の通りです。
library(dplyr)
# 構文
data %>%
count(column_name)
ここで、data
はデータフレーム、column_name
は頻度を集計したい列名を指定します。
基本例:遺伝子データの頻度解析
遺伝子の発現データ(例:RNA-seqデータ)が以下のようにあったとします。
gene_data <- data.frame(
gene = c("TP53", "BRCA1", "EGFR", "TP53", "BRCA1", "TP53"),
expression_level = c(12, 15, 8, 20, 25, 30)
)
このデータフレームに含まれる遺伝子名の頻度を数えたい場合、以下のように実行します。
gene_data %>%
count(gene)
出力結果
gene n
1 BRCA1 2
2 EGFR 1
3 TP53 3
count
関数によって、各遺伝子がデータ内に何回出現しているかが一目でわかります。
count 関数の応用
1. ソート順の変更
デフォルトではcount
関数は昇順で結果を返しますが、降順で結果を確認したい場合はsort = TRUE
オプションを使います。
gene_data %>%
count(gene, sort = TRUE)
出力結果
gene n
1 TP53 3
2 BRCA1 2
3 EGFR 1
これにより、頻度の高い順に結果を確認できます。
2. 複数列での集計
バイオインフォマティクスでは、複数の条件でデータをグループ化して解析したい場合があります。count
関数は複数の列を指定して集計することも可能です。
sample_data <- data.frame(
sample_id = c("S1", "S1", "S2", "S2", "S3", "S3"),
gene = c("TP53", "BRCA1", "TP53", "EGFR", "BRCA1", "EGFR"),
expression_level = c(12, 15, 20, 8, 25, 30)
)
sample_data %>%
count(sample_id, gene, sort = TRUE)
出力結果
sample_id gene n
1 S3 BRCA1 1
2 S3 EGFR 1
3 S2 EGFR 1
4 S2 TP53 1
5 S1 BRCA1 1
6 S1 TP53 1
これにより、サンプルIDごとに遺伝子の分布がわかります。
3. 重み付き集計count
関数では、重み(ウェイト)を指定することで、単純な頻度ではなく、重み付けされた値を集計できます。たとえば、各遺伝子の発現レベルを合計する場合は以下のようにします。
gene_data %>%
count(gene, wt = expression_level)
出力結果
gene n
1 BRCA1 40
2 EGFR 8
3 TP53 62
このように、wt
オプションで特定の列を指定することで、値の合計を計算できます。
4. パイプラインとの組み合わせ
dplyrの他の関数と組み合わせることで、より柔軟な解析が可能です。たとえば、特定の条件を満たすデータのみを対象に頻度を数える場合:
gene_data %>%
filter(expression_level > 15) %>%
count(gene, sort = TRUE)
出力結果
gene n
1 BRCA1 1
2 TP53 2
ここでは、expression_level
が15より大きい行だけを対象に集計しています。
バイオインフォマティクスにおける応用例
ケーススタディ1: サンプル間の遺伝子発現の分布解析
RNA-seqデータを用いて、サンプルごとの遺伝子発現分布を解析する際、count
関数を使用することで効率的にグループ化や頻度解析が行えます。
rna_seq_data <- data.frame(
sample_id = rep(c("S1", "S2", "S3"), each = 4),
gene = c("TP53", "BRCA1", "EGFR", "TP53", "TP53", "EGFR", "BRCA1", "TP53", "BRCA1", "BRCA1", "EGFR", "EGFR")
)
rna_seq_data %>%
count(sample_id, gene, sort = TRUE)
これにより、各サンプルごとに遺伝子の出現頻度を把握できます。
ケーススタディ2: バリアントデータの解析
バイオインフォマティクスでは、変異(バリアント)の解析も重要です。たとえば、特定の遺伝子で見つかった変異の種類とその頻度を解析する場合:
variant_data <- data.frame(
gene = c("TP53", "TP53", "BRCA1", "EGFR", "TP53", "BRCA1"),
mutation_type = c("missense", "nonsense", "frameshift", "missense", "missense", "nonsense")
)
variant_data %>%
count(gene, mutation_type, sort = TRUE)
出力結果
gene mutation_type n
1 TP53 missense 2
2 TP53 nonsense 1
3 BRCA1 nonsense 1
4 BRCA1 frameshift 1
5 EGFR missense 1
これにより、遺伝子ごとにどの変異が多いかを視覚化できます。
おわりに
dplyr
のcount
関数は、バイオインフォマティクスにおけるデータ解析において、シンプルで強力なツールです。その基本的な機能だけでなく、応用的な使い方を組み合わせることで、より複雑なデータ解析を効率的に行うことが可能です!!
これからバイオインフォマティクスでRを活用しようと考えている方は、ぜひcount
関数をデータ解析の一部として取り入れてみてくださいね〜!