バイオインフォマティクスのデータ解析では、大量のデータを効率よく処理することが求められます。tidyverse
のdplyr
は、データフレームを直感的かつ簡潔に操作できる強力なパッケージであり、その中でも列の選択やフィルタリングを行う際に便利な関数が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
まとめ
dplyr
のcontains()
を活用することで、特定の文字列を含むカラムを一括で選択でき、データの整理や前処理が効率的になります!!
select(contains())
でカラム選択rename_with()
でカラム名変更mutate(across())
で値の変換- バイオインフォマティクスで遺伝子発現データやメタデータの整理に活用
ぜひ、実際のデータ解析で試してみてくださいね〜!