R tidyverse:正規表現で列をフィルタリング「matches」の使い方

スポンサーリンク

バイオインフォマティクスにおいて、データ解析の効率を向上させるために Rのtidyverse を活用しようと考えている方も多いのではないでしょうか?
その中でも、dplyr はデータ操作において強力なツールです。特に、列名のパターンマッチング を簡単に行うことができる matches() 関数は、大規模なバイオデータを扱う際に便利です。

本記事では、matches() の基本的な操作を解説し、バイオデータ解析への応用を考えていきます。


1. matches() とは?

matches() は dplyrのselect()内で使われるヘルパー関数 で、正規表現(regex)を用いて列名をフィルタリング できます。

例えば、バイオインフォマティクスでは 遺伝子発現データ や サンプル情報 など、多数の列を持つデータフレームを扱うことがよくあります。
matches() を使えば、特定のキーワードを含む列を簡単に選択できます。


2. matches() の基本的な使い方

まずは、matches() の基本的な構文を確認しましょう。

select(データフレーム, matches("パターン"))

例1:特定の単語を含む列を抽出

サンプルデータを作成し、matches() を使って “gene” を含む列を選択してみます。

library(tidyverse)

# ダミーデータの作成
df <- tibble(
  sample_id = 1:5,
  gene_A_exp = c(2.3, 4.5, 3.2, 5.1, 4.0),
  gene_B_exp = c(1.2, 3.4, 2.8, 3.9, 2.1),
  condition = c("control", "treated", "control", "treated", "control")
)

# "gene" を含む列のみ選択
df %>% select(matches("gene"))

実行結果

# A tibble: 5 × 2
  gene_A_exp gene_B_exp
       <dbl>      <dbl>
1       2.3        1.2
2       4.5        3.4
3       3.2        2.8
4       5.1        3.9
5       4.0        2.1

解説

  • matches("gene") により、gene_A_exp と gene_B_exp が選択されました。
  • sample_id や condition など、”gene” を含まない列は除外されています。

3. matches() でより柔軟なパターンマッチング

例2:特定の接頭辞(prefix)を持つ列を選択

例えば、すべての “gene_” で始まる列を選択したい場合、次のように書けます。

df %>% select(matches("^gene_"))
  • ^ は 「先頭一致」 を意味します。
  • "^gene_" で、”gene_” から始まるすべての列を取得できます。

例3:特定の接尾辞(suffix)を持つ列を選択

“exp” で終わる列だけを選びたい場合は、次のように記述できます。

df %>% select(matches("_exp$"))
  • $ は 「末尾一致」 を意味します。
  • "_exp$" により、”_exp” で終わる列を選択できます。

例4:複数の単語を含む列を選択

例えば、”A” または “B” を含む列を取得するには、次のように記述します。

df %>% select(matches("A|B"))
  • | は 「または」 を意味する 正規表現のOR演算子 です。
  • "A|B" により、”A” または “B” を含む列がすべて選択されます。

4. バイオデータ解析への応用

実際のバイオデータでは、数百、数千の遺伝子が列名として含まれるデータフレームを扱うことがあります。matches() を活用すると、関心のある遺伝子や条件のみを簡単に抽出 できます。

ケーススタディ:RNA-seq データ解析

RNA-seq データのデータフレームを仮定し、特定の遺伝子を含む列を選択してみます。

rna_seq_data <- tibble(
  sample_id = 1:5,
  TP53_expr = runif(5, 10, 50),
  BRCA1_expr = runif(5, 5, 40),
  MYC_expr = runif(5, 20, 100),
  housekeeping_GAPDH = runif(5, 30, 80)
)

# "expr" を含む遺伝子の発現データのみを抽出
rna_seq_data %>% select(matches("expr$"))

実行結果

# A tibble: 5 × 3
  TP53_expr BRCA1_expr MYC_expr
      <dbl>      <dbl>    <dbl>
1      25.3       7.2     89.4
2      33.1      12.3     67.8
3      14.5      29.1     54.2
4      42.8      23.5     72.6
5      39.7      18.9     80.1

ポイント

  • "expr$" を指定することで、TP53_expr、BRCA1_expr、MYC_expr など、発現値を示す列のみを取得できました。
  • housekeeping_GAPDH は”expr”を含まないため除外されました。

5. まとめ

本記事では、dplyr の matches() 関数を用いた列名のパターンマッチング について解説しました。

主なポイント

  1. matches("パターン") を使うと、正規表現を用いて列を選択できる。
  2. "^prefix" で 特定の接頭辞 を持つ列を選択。
  3. "suffix$" で 特定の接尾辞 を持つ列を選択。
  4. "A|B" で 複数の単語を含む列 を選択可能。
  5. バイオデータ解析では、RNA-seq などの 大規模データの前処理 に非常に役立つ。

特にバイオインフォマティクスの解析では、大量のデータをいかに効率よく処理するかが重要です。
matches() を活用することで、スクリプトの可読性を向上させつつ、必要な情報を迅速に抽出 できるようになります!!

ぜひ実践で試してみてくださいね〜!

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