R tidyverse:指定した数だけ前にずらす「lag」の使い方

スポンサーリンク

バイオインフォマティクスのデータ解析では、時系列データや連続データを扱うことがよくあります。こうしたデータの前後関係を分析する際に便利な関数のひとつが、lag() です。
lag() は、データの各要素を一つ前の値と比較したいときに役立つ関数で、Rの dplyr パッケージに含まれています。

本記事では、dplyr::lag() の基本操作を解説し、バイオインフォマティクスのデータ処理でどのように活用できるかを考えます。


1. lag() 関数とは?

lag() は、ベクトルの値を「指定した数だけ前にずらす(遅らせる)」ための関数です。
時系列データや実験データのトレンドを解析するときに、前の値と現在の値を比較する用途で頻繁に用いられます。

構文

lag(x, n = 1, default = NA, order_by = NULL)
  • x:シフトさせたいベクトル
  • n:どれだけ遅らせるか(デフォルトは1)
  • default:遅らせたときに新しくできる先頭の値(デフォルトは NA
  • order_by:時系列順など、並べ替えの基準(省略可能)

2. 基本的な使用例

まずは、lag() の基本的な使い方を見ていきましょう。

① 単純な lag() の例

library(dplyr)

x <- c(10, 20, 30, 40, 50)
lag(x)

出力

[1] NA 10 20 30 40

lag() を適用すると、各要素が一つ後ろにシフトし、最初の値は NA になります。

② n を指定して複数シフト

lag(x, n = 2)

出力

[1] NA NA 10 20 30

n = 2 を指定すると、2つ前の値が対応する位置に移動し、先頭2つが NA になります。

③ default を指定

lag(x, n = 1, default = 0)

出力

[1]  0 10 20 30 40

default = 0 を設定すると、NA の代わりに 0 が入ります。


3. lag() をデータフレームで使用

バイオインフォマティクスでは、データフレーム(tibble 形式)で遺伝子発現データや測定値を扱うことが一般的です。
dplyr::mutate() と組み合わせて lag() を使うと、列ごとに処理できます。

④ データフレームで lag() を適用

library(dplyr)

df <- tibble(
  time = 1:5,
  value = c(5, 10, 15, 20, 25)
)

df <- df %>%
  mutate(prev_value = lag(value))

print(df)

出力

# A tibble: 5 × 3
   time  value prev_value
  <int>  <dbl>      <dbl>
1     1      5         NA
2     2     10          5
3     3     15         10
4     4     20         15
5     5     25         20

prev_value 列には、一つ前の value の値が入ります。

⑤ lag() を使って変化量を計算

実験データでは、各測定値の前後変化(例えば、発現レベルの増減)を調べたいことがあります。その場合、lag() を使って変化量を計算できます。

df <- df %>%
  mutate(change = value - lag(value))

print(df)

出力

# A tibble: 5 × 4
   time  value prev_value change
  <int>  <dbl>      <dbl>  <dbl>
1     1      5         NA     NA
2     2     10          5      5
3     3     15         10      5
4     4     20         15      5
5     5     25         20      5

change 列には、前回の値との差が計算されています。NA の行はデータが存在しないため、そのまま NA になります。


4. lag() をバイオインフォマティクスで活用

バイオインフォマティクスのデータ解析で lag() を活用する場面を考えてみましょう。

⑥ RNA-Seq の時系列解析

遺伝子発現データ(RNA-Seq)を時系列で解析するとき、ある時点の発現量と前回の発現量の差分を計算するのに lag() を使えます。

rna_data <- tibble(
  time = c("T0", "T1", "T2", "T3"),
  expression = c(50, 75, 90, 120)
)

rna_data <- rna_data %>%
  mutate(change = expression - lag(expression))

print(rna_data)

出力

# A tibble: 4 × 3
  time  expression change
  <chr>      <dbl>  <dbl>
1 T0            50     NA
2 T1            75     25
3 T2            90     15
4 T3           120     30

change 列を使えば、発現レベルの増減が簡単に計算できます。

⑦ 遺伝子変異の累積変化

遺伝子変異の頻度が時間とともにどのように変化するかを解析する際にも lag() が便利です。


5. まとめ

lag() は、前のデータとの比較や差分の計算に役立つ便利な関数です。特にバイオインフォマティクスの時系列データ解析では、RNA-Seq や遺伝子変異データの処理に応用できます!!

ポイントまとめ

lag() を使うと、データを前の値にシフトできる
mutate() と組み合わせると、データフレーム内で前の値との差分を計算可能
✅ 遺伝子発現や変異頻度の変化を分析するのに応用できる

バイオデータ解析では、dplyr::lag() を活用してデータの傾向を掴み、有意義な結果を導き出しましょう〜!

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