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_expgene_B_exp が選択されました。
  • sample_idcondition など、”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_exprBRCA1_exprMYC_expr など、発現値を示す列のみを取得できました。
  • housekeeping_GAPDH は”expr”を含まないため除外されました。

5. まとめ

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

主なポイント

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

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

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

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