バイオインフォマティクスでは、大量のデータを効率的に処理するためのツールが不可欠です。その中で、Rのtidyverse は、データの整形や解析を直感的かつ強力に行うためのパッケージ群として広く利用されています。
本記事では、tidyverseのdplyrパッケージ に含まれる slice_min
・slice_max
関数について解説し、その応用方法をバイオインフォマティクスの視点から紹介します。
1. slice_min・slice_maxとは?
slice_min()
および slice_max()
は、指定した列の最小・最大の値を持つ行を抽出する 関数です。データフレームの行数が膨大な場合でも、効率的に特定のデータを取得できます。
基本的な使い方
slice_min(.data, order_by, n = 1, with_ties = TRUE)
order_by
: 並び替えの基準となる列n
: 取得する行数(デフォルトは1)with_ties
: 同じ値を持つ行をすべて含めるか(デフォルトはTRUE
)
slice_max(.data, order_by, n = 1, with_ties = TRUE)
slice_min()
の逆で、最大値を持つ行を取得
基本例
まず、架空のバイオインフォマティクスデータを用意します。
library(dplyr)
# 遺伝子発現データの例
gene_expression <- tibble(
gene = c("GeneA", "GeneB", "GeneC", "GeneD", "GeneE"),
expression_level = c(12.3, 45.6, 8.9, 67.8, 45.6)
)
# 最小の発現レベルの遺伝子を取得
gene_expression %>% slice_min(order_by = expression_level)
# 最大の発現レベルの遺伝子を取得
gene_expression %>% slice_max(order_by = expression_level)
出力:
# slice_min の結果
# gene expression_level
# GeneC 8.9
# slice_max の結果
# gene expression_level
# GeneD 67.8
このように、slice_min
で最小の値(8.9)、slice_max
で最大の値(67.8)を持つ行を取得できます。
2. 応用例
バイオインフォマティクスのデータ解析では、特定の条件に合う遺伝子やサンプルを抽出する場面が多々あります。ここでは、応用的な使い方をいくつか紹介します。
応用1:複数の最小・最大値を取得
例えば、上位3つの遺伝子を取得する場合は n = 3
を指定します。
# 上位3つの遺伝子を取得
gene_expression %>% slice_max(order_by = expression_level, n = 3)
出力:
# gene expression_level
# GeneD 67.8
# GeneB 45.6
# GeneE 45.6
発現量が同じ遺伝子 (GeneB
と GeneE
) も含まれます。
応用2:特定の条件でグループごとに最小・最大値を取得
異なるサンプル間での遺伝子発現データを解析する場合、グループごとに最大・最小の遺伝子を抽出 することが重要です。
# サンプルごとに最大発現の遺伝子を取得
gene_expression_grouped <- tibble(
sample = c("Sample1", "Sample1", "Sample2", "Sample2", "Sample3"),
gene = c("GeneA", "GeneB", "GeneC", "GeneD", "GeneE"),
expression_level = c(12.3, 45.6, 8.9, 67.8, 45.6)
)
# サンプルごとの最大発現遺伝子
gene_expression_grouped %>%
group_by(sample) %>%
slice_max(order_by = expression_level)
出力:
# sample gene expression_level
# Sample1 GeneB 45.6
# Sample2 GeneD 67.8
# Sample3 GeneE 45.6
このように、各サンプルごとに最大発現の遺伝子を簡単に取得できます。
応用3:RNA-Seqデータの解析
RNA-Seqデータでは、発現量の高い遺伝子をリストアップすることで、重要なバイオマーカーの特定に役立ちます。
例えば、DESeq2
で正規化した発現データ normalized_counts
から、最も発現量が高いトップ10の遺伝子を抽出する方法は以下のようになります。
# RNA-Seqの正規化発現データ (仮)
rna_seq_data <- tibble(
gene = paste0("Gene", 1:100),
expression_level = runif(100, min = 0, max = 1000) # 0から1000のランダム値
)
# 発現量の高いトップ10の遺伝子を取得
rna_seq_data %>% slice_max(order_by = expression_level, n = 10)
このコードは、ランダムな発現データを用いて最も発現量の高い遺伝子10個を取得します。
3. filter() との違い
同じようにデータを抽出する方法として filter()
がありますが、slice_min
・slice_max
との違いは以下の通りです。
関数 | 使い方 | 例 |
---|---|---|
filter() | 特定の条件を満たす行を抽出 | filter(expression_level == min(expression_level)) |
slice_min() / slice_max() | データの最小・最大値を自動で選択 | slice_min(order_by = expression_level, n = 1) |
slice_min
・slice_max
の方が、最小・最大値を簡単に取得できる点で優れています。
まとめ
slice_min()
と slice_max()
は、データの最小・最大値を持つ行を効率的に取得できる 強力な関数です。バイオインフォマティクスにおいて、RNA-Seqデータの解析や特定の遺伝子の抽出など、多くの場面で活用できます!!
今回のポイント
slice_min()
は最小値、slice_max()
は最大値を持つ行を取得n
を指定すれば複数の行を取得可能group_by()
と組み合わせることで、グループごとの解析が可能- RNA-Seqデータ解析などバイオインフォマティクスの実データにも応用できる
Rのtidyverseを活用して、より効率的なデータ解析を実践してみてくださいね〜!