Rのtidyverse:行を指定して抽出slice()の使い方

スポンサーリンク

バイオインフォマティクスでは、大規模なデータセットを効率的に処理することが求められます。Rのtidyverseパッケージ群は、データの整形や可視化に強力なツールを提供し、その中でもdplyrはデータ操作の中心的な役割を果たします。

本記事では、dplyrの関数slice()を取り上げ、その基本的な使い方をバイオインフォマティクスの視点で解説します。


1. slice()とは?

slice()は、データフレームやtibbleの行を選択するための関数です。filter()が条件を指定して行を抽出するのに対し、slice()は行番号(インデックス)を指定して抽出を行います。

基本的な構文は以下の通りです。

slice(.data, ...)
  • .data:データフレームまたはtibble
  • ...:抽出したい行番号

例えば、RNA-Seqデータの一部だけを抜き出したい場合や、特定のサンプルの上位数行を取得したい場合に役立ちます。


2. 基本的な使い方

2.1 特定の行を取得

データフレームdfの1, 3, 5行目を取得する例を示します。

library(dplyr)

df <- tibble(
  Gene = c("GeneA", "GeneB", "GeneC", "GeneD", "GeneE"),
  Expression = c(10.5, 8.3, 15.2, 9.7, 12.1)
)

df %>% slice(1, 3, 5)

出力:

# A tibble: 3 × 2
  Gene  Expression
  <chr>      <dbl>
1 GeneA       10.5
2 GeneC       15.2
3 GeneE       12.1

このように、行番号を指定することで任意の行を取得できます。


2.2 先頭や末尾の行を取得

  • slice_head(n = k): 先頭k行を取得
  • slice_tail(n = k): 末尾k行を取得
df %>% slice_head(n = 3)
# A tibble: 3 × 2
  Gene  Expression
  <chr>      <dbl>
1 GeneA       10.5
2 GeneB        8.3
3 GeneC       15.2
df %>% slice_tail(n = 2)
# A tibble: 2 × 2
  Gene  Expression
  <chr>      <dbl>
1 GeneD        9.7
2 GeneE       12.1

バイオインフォマティクスでは、遺伝子発現データの上位(または下位)のエントリーを抽出する際に便利です。


2.3 ランダムな行を取得

slice_sample(n = k) を使うと、ランダムにk行を取得できます。

df %>% slice_sample(n = 2)

slice_sample() はデータセットのサブセットをランダムに抽出するのに役立ちます。例えば、RNA-Seqデータからランダムな遺伝子を選んで可視化する際に有用です。


3. 応用編:グループごとの処理

バイオインフォマティクスでは、サンプルごとの集約や条件ごとのデータ抽出が重要です。slice()group_by()と組み合わせることで、各グループごとに処理を適用できます。

3.1 各グループのトップエントリーを取得

例えば、異なる条件(Condition)ごとに、発現量(Expression)の最も高い遺伝子を取得する場合、slice_max()を使います。

df <- tibble(
  Gene = c("GeneA", "GeneB", "GeneC", "GeneD", "GeneE", "GeneF"),
  Condition = c("Control", "Control", "Treated", "Treated", "Control", "Treated"),
  Expression = c(10.5, 8.3, 15.2, 9.7, 12.1, 16.4)
)

df %>%
  group_by(Condition) %>%
  slice_max(Expression, n = 1)

出力:

# A tibble: 2 × 3
# Groups:   Condition [2]
  Gene  Condition Expression
  <chr> <chr>         <dbl>
1 GeneE Control       12.1
2 GeneF Treated       16.4

このように、各グループの最大値を持つ行を取得できます。


3.2 各グループからランダムにサンプリング

各グループからランダムに1行を選ぶことも可能です。

df %>%
  group_by(Condition) %>%
  slice_sample(n = 1)

これは、異なる条件のサンプルからランダムに遺伝子を選ぶときに役立ちます。


3.3 複数行を抽出するケース

例えば、各条件のトップ3の遺伝子を取得したい場合は、以下のようにslice_max()を使います。

df %>%
  group_by(Condition) %>%
  slice_max(Expression, n = 3)

4. まとめ

dplyrslice()は、データの行を指定して取得するシンプルながら強力な関数です。特にバイオインフォマティクスのデータ解析においては、以下のような用途で活用できます。

  • 特定の遺伝子データの抽出
  • 発現量の高い遺伝子のフィルタリング
  • 条件ごとの最大・最小値の取得
  • ランダムサンプリングによるデータの部分抽出

また、group_by()と組み合わせることで、各条件ごとのデータを処理することも可能になります!!

バイオインフォマティクスのデータ処理にtidyverseを活用することで、解析をより効率的に行うことができます。ぜひ実際のデータで試してみてくださいね〜!

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