R tidyverse:特定の文字列を含む列選択「contains()」の使い方

スポンサーリンク

バイオインフォマティクスのデータ解析では、大量のデータを効率よく処理することが求められます。tidyversedplyrは、データフレームを直感的かつ簡潔に操作できる強力なパッケージであり、その中でも列の選択やフィルタリングを行う際に便利な関数がcontains()です。

contains()を活用すると、特定の文字列を含むカラム(列)を一括で選択できるため、RNA-Seqデータやメタデータの処理をよりスムーズに行えます。今回は、contains()の基本的な使い方から応用例までを詳しく解説します。


1. contains()の基本

contains()とは?

contains()は、列名に特定の文字列を含むカラムを抽出するための関数です。通常、select()と組み合わせて使用されます。

基本的な構文

select(データフレーム, contains("特定の文字列"))

この関数を使うことで、例えば「gene」という文字列を含む全てのカラムを一括で選択できます。

使用例

まず、以下のようなデータを用意します。

library(tidyverse)

df <- tibble(
  Sample_ID = c(1, 2, 3),
  Gene_A = c(10, 20, 30),
  Gene_B = c(40, 50, 60),
  Expression_Level = c(100, 200, 300)
)

df

出力:

# A tibble: 3 × 4
  Sample_ID Gene_A Gene_B Expression_Level
      <dbl>  <dbl>  <dbl>            <dbl>
1         1     10     40              100
2         2     20     50              200
3         3     30     60              300

このデータに対して、「Gene」という文字列を含むカラムだけを選択する場合、次のように書けます。

df_genes <- df %>%
  select(contains("Gene"))

df_genes

出力:

# A tibble: 3 × 2
  Gene_A Gene_B
   <dbl>  <dbl>
1     10     40
2     20     50
3     30     60

このように、「Gene」を含むすべてのカラムを一括取得できます。


2. contains()の応用

(1) rename_with()と組み合わせてカラム名を変更

contains()rename_with()と組み合わせることで、特定のカラム名に一括で変更を加えることができます。

例: 「Gene」という文字列を「G_」に置き換える

df_renamed <- df %>%
  rename_with(~ gsub("Gene", "G_", .x), contains("Gene"))

df_renamed

出力:

# A tibble: 3 × 4
  Sample_ID G_A G_B Expression_Level
      <dbl> <dbl> <dbl>           <dbl>
1         1    10    40             100
2         2    20    50             200
3         3    30    60             300

このように、一括でカラム名を変更することで、より分かりやすい名前に整理できます。


(2) mutate()と組み合わせて特定カラムのデータを変換

contains()は、mutate()と組み合わせることで、特定のカラムのデータを変換する際にも役立ちます。

例: 「Gene」を含むカラムの値を2倍にする

df_scaled <- df %>%
  mutate(across(contains("Gene"), ~ . * 2))

df_scaled

出力:

# A tibble: 3 × 4
  Sample_ID Gene_A Gene_B Expression_Level
      <dbl>  <dbl>  <dbl>            <dbl>
1         1     20     80              100
2         2     40    100              200
3         3     60    120              300

across()と組み合わせることで、「Gene」を含むカラムだけを変換することができます。


(3) filter()と組み合わせて条件抽出

contains()filter()と組み合わせることで、特定のカラムに基づいたフィルタリングを行えます。

例: 「Gene_*」の値が20以上の行を抽出

df_filtered <- df %>%
  filter(across(contains("Gene_"), ~ . >= 20))

df_filtered

出力:

# A tibble: 2 × 4
  Sample_ID Gene_A Gene_B Expression_Level
      <dbl>  <dbl>  <dbl>            <dbl>
1         2     20     50              200
2         3     30     60              300

(4) バイオインフォマティクスでの活用例

① RNA-Seqデータの遺伝子発現カラムの抽出

RNA-Seqの発現データでは、遺伝子ごとにカラムがある場合が多いです。そのようなデータセットで、遺伝子発現に関するカラムだけを選択する場合、contains()が役立ちます。

rna_seq <- tibble(
  Sample_ID = c("S1", "S2", "S3"),
  TPM_Gene1 = c(5.2, 3.1, 7.8),
  TPM_Gene2 = c(8.5, 2.3, 6.4),
  Condition = c("Control", "Treatment", "Control")
)

rna_seq_genes <- rna_seq %>%
  select(contains("TPM"))

rna_seq_genes

出力:

# A tibble: 3 × 2
  TPM_Gene1 TPM_Gene2
      <dbl>     <dbl>
1       5.2       8.5
2       3.1       2.3
3       7.8       6.4

このように、TPM_というプレフィックスを持つすべての遺伝子発現データを一括で選択できます。

② メタデータの整理

メタデータには、測定日やサンプルIDが含まれることが多いですが、「date」を含むカラムを抽出したい場合、以下のように使えます。

metadata <- tibble(
  Sample_ID = c("S1", "S2", "S3"),
  date_collected = c("2024-02-01", "2024-02-05", "2024-02-10"),
  date_processed = c("2024-02-03", "2024-02-07", "2024-02-12"),
  Technician = c("A", "B", "C")
)

metadata_dates <- metadata %>%
  select(contains("date"))

metadata_dates

出力:

# A tibble: 3 × 2
  date_collected date_processed
  <chr>          <chr>         
1 2024-02-01     2024-02-03    
2 2024-02-05     2024-02-07    
3 2024-02-10     2024-02-12    

まとめ

dplyrcontains()を活用することで、特定の文字列を含むカラムを一括で選択でき、データの整理や前処理が効率的になります!!

  • select(contains()) でカラム選択
  • rename_with() でカラム名変更
  • mutate(across()) で値の変換
  • バイオインフォマティクスで遺伝子発現データやメタデータの整理に活用

ぜひ、実際のデータ解析で試してみてくださいね〜!

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