R tidyverse:計算後の新しい列を追加する「mutate」の使い方

スポンサーリンク

バイオインフォマティクスでは、大量のデータを効率よく処理するために R の tidyverse を活用することが有用です。特に、dplyrmutate() 関数は、データフレームに新しい列を追加したり、既存の列を変更したりする際に欠かせません。本記事では、mutate() の基本的な使い方から、バイオインフォマティクスに役立つ応用テクニックまでを解説します。


1. mutate() の基本

mutate() は、データフレームの各行に対して計算を行い、新しい列を追加する、または既存の列を変更するための関数です。まずは基本的な使い方を確認しましょう。

基本的な構文

library(dplyr)

# サンプルデータ
df <- tibble(
  sample_id = c("S1", "S2", "S3"),
  weight_kg = c(70, 60, 80)
)

# 体重をポンド(lbs)に変換
df <- df %>%
  mutate(weight_lbs = weight_kg * 2.20462)

print(df)

出力

# A tibble: 3 × 3
  sample_id weight_kg weight_lbs
  <chr>        <dbl>      <dbl>
1 S1              70      154.3
2 S2              60      132.3
3 S3              80      176.4

このように、mutate() を使うことで 新しい列 weight_lbs を追加できます。


2. mutate() の応用

バイオインフォマティクスのデータ解析では、より複雑なデータ操作が求められます。以下の応用例を見てみましょう。

2.1 条件に応じた列の作成 (case_when())

実験サンプルのグループを条件に応じて分類することがよくあります。その際、case_when()mutate() と組み合わせると便利です。

df <- df %>%
  mutate(weight_category = case_when(
    weight_kg < 65 ~ "Light",
    weight_kg >= 65 & weight_kg < 75 ~ "Medium",
    weight_kg >= 75 ~ "Heavy"
  ))

print(df)

出力

# A tibble: 3 × 4
  sample_id weight_kg weight_lbs weight_category
  <chr>        <dbl>      <dbl> <chr>          
1 S1              70      154.3 Medium         
2 S2              60      132.3 Light          
3 S3              80      176.4 Heavy          

case_when() を使うことで、体重を 「Light」「Medium」「Heavy」 に分類できました。


2.2 複数の新しい列を一度に作成

mutate() は複数の列を同時に追加・変更できます。

df <- df %>%
  mutate(
    height_m = c(1.75, 1.68, 1.80),
    bmi = weight_kg / (height_m^2)
  )

print(df)

出力

# A tibble: 3 × 6
  sample_id weight_kg weight_lbs weight_category height_m   bmi
  <chr>        <dbl>      <dbl> <chr>              <dbl> <dbl>
1 S1              70      154.3 Medium              1.75  22.9
2 S2              60      132.3 Light               1.68  21.3
3 S3              80      176.4 Heavy               1.80  24.7

このように、複数の列を一度に追加 できるのが mutate() の強みです。


2.3 列の変更 (mutate() を if_else() と組み合わせる)

特定の条件に応じて、既存の列の値を変更したい場合、if_else() を使います。

df <- df %>%
  mutate(weight_kg = if_else(weight_kg > 75, weight_kg - 5, weight_kg))

print(df)

このコードでは、体重が 75 kg 以上の人の体重を 5 kg 減らす という処理を行っています。


3. バイオインフォマティクスでの活用例

3.1 遺伝子発現データの正規化

遺伝子発現データを 対数変換(log2) することで、スケールのばらつきを抑えることができます。

gene_expression <- tibble(
  gene = c("GeneA", "GeneB", "GeneC"),
  expression = c(100, 500, 1000)
)

gene_expression <- gene_expression %>%
  mutate(log2_expression = log2(expression))

print(gene_expression)

出力

# A tibble: 3 × 3
  gene  expression log2_expression
  <chr>      <dbl>           <dbl>
1 GeneA        100            6.64
2 GeneB        500            8.97
3 GeneC       1000            9.97

このように、mutate() を使って 遺伝子発現値の log2 変換 を簡単に行えます。


3.2 FASTQ データのクオリティスコア変換

NGS(次世代シーケンス)のクオリティスコアは Phred スケールで表されることが多いですが、線形スケールに変換する場合もあります。

fastq_data <- tibble(
  read_id = c("R1", "R2", "R3"),
  phred_score = c(30, 35, 40)
)

fastq_data <- fastq_data %>%
  mutate(probability_error = 10^(-phred_score / 10))

print(fastq_data)

出力

# A tibble: 3 × 3
  read_id phred_score probability_error
  <chr>        <dbl>              <dbl>
1 R1             30          0.00100   
2 R2             35          0.000316  
3 R3             40          0.000100  

この変換を行うことで、クオリティスコアをエラー確率に変換できます。


4. まとめ

mutate() は、バイオインフォマティクスにおいてデータを整形・加工するのに欠かせない関数です。本記事では以下の点を学びました。

mutate() の基本(新しい列の追加・既存の列の変更)
case_when() を用いた条件分岐
if_else() を使った列の修正
✅ 遺伝子発現データの変換(log2 変換)
✅ NGS クオリティスコアの変換

tidyverse の mutate() を活用することで、バイオインフォマティクスのデータ解析を より直感的かつ効率的 に進めることができます!!

ぜひ、実際のデータに応用してみてくださいね〜!

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