R tidyverse:累積的なすべての TRUE 判定をチェック「cumall」の使い方

スポンサーリンク

バイオインフォマティクスの解析では、膨大なデータを扱うことが一般的です。そのため、データ操作の効率を高める tidyverse パッケージ群の活用は不可欠です。特に、dplyr はデータフレームを扱ううえで非常に便利なツールを提供しています。

本記事では、dplyr に含まれる cumall() 関数の基本的な操作を解説しながら、バイオインフォマティクスのデータ処理にどのように役立つかを考えていきます。


1. cumall() とは?

cumall() は、ベクトルの要素に対して「累積的なすべての TRUE 判定」を適用する関数です。すなわち、先頭の要素から順に TRUE が続いているかどうかを判定し、それをベクトルの各要素に反映します。

この関数は、以下のような状況で役立ちます:

  • 一定の条件が「どこまで連続して満たされているか」を確認したい場合
  • フィルタリング条件を累積的に適用したい場合
  • タイムシリーズデータで連続したイベントの有無を評価したい場合

2. cumall() の基本的な使い方

まずは、簡単なベクトルを使って cumall() の動作を見てみましょう。

(1) シンプルな例

library(dplyr)

vec <- c(TRUE, TRUE, FALSE, TRUE, TRUE)
cumall(vec)

結果

[1]  TRUE  TRUE FALSE FALSE FALSE

この出力を分解して考えてみましょう:

  • TRUETRUEFALSE になった時点で、それ以降の値はすべて FALSE になる。
  • cumall() は「累積的な AND 演算」を行うため、一度 FALSE が出現すると、それ以降は FALSE になる。

(2) 数値ベクトルに適用する

cumall() は数値ベクトルにも適用可能です。たとえば、「値が増加し続けているか」を判定する場合に使えます。

x <- c(1, 2, 3, 2, 5)
cumall(x >= lag(x, default = first(x)))

結果

[1]  TRUE  TRUE  TRUE FALSE FALSE
  • lag(x, default = first(x))x を1つずらしたベクトルを作成します(先頭の要素は変わらず)。
  • x >= lag(x, default = first(x)) は、各要素が前の要素以上かどうかを判定します。
  • それに cumall() を適用すると、「増加し続けているか」を累積的にチェックできます。

このように、データの変化をトラッキングする際に cumall() は有用です。


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

(1) 遺伝子発現データでの活用

RNA-seq やマイクロアレイデータの解析では、遺伝子の発現レベルが一定の条件を満たし続けているかどうかを評価することが重要です。

例えば、ある遺伝子の発現値が実験の時間経過とともに増加し続けるかどうかをチェックする場合、cumall() を活用できます。

data <- tibble(
  time = 1:6,
  expression = c(2.1, 2.5, 2.8, 2.6, 3.0, 3.5)
)

data %>%
  mutate(increasing = cumall(expression >= lag(expression, default = first(expression))))

結果

# A tibble: 6 × 3
   time expression increasing
  <int>      <dbl> <lgl>     
1     1       2.1  TRUE      
2     2       2.5  TRUE      
3     3       2.8  TRUE      
4     4       2.6  FALSE     
5     5       3.0  FALSE     
6     6       3.5  FALSE     

この場合、expression が増加し続けているかをチェックでき、4回目で FALSE になって以降は FALSE が続きます。


(2) 変異データの解析

バイオインフォマティクスでは、ゲノムの変異データを扱うことが多く、特定の変異が一定の位置以降でどの程度連続して現れるかを調べることがあります。

例えば、変異スコアが一定値以上の状態が続いているかを cumall() で判定できます。

mutations <- tibble(
  position = 1:10,
  mutation_score = c(0.9, 1.2, 1.5, 0.8, 1.6, 1.9, 2.0, 1.5, 1.7, 1.8)
)

mutations %>%
  mutate(high_confidence = cumall(mutation_score >= 1.0))

結果

# A tibble: 10 × 3
   position mutation_score high_confidence
      <int>         <dbl> <lgl>           
1        1           0.9 FALSE           
2        2           1.2 FALSE           
3        3           1.5 FALSE           
4        4           0.8 FALSE           
5        5           1.6 FALSE           
6        6           1.9 FALSE           
7        7           2.0 FALSE           
8        8           1.5 FALSE           
9        9           1.7 FALSE           
10      10           1.8 FALSE           

このように、特定の変異スコアが「最初からしきい値を超えているかどうか」を確認するのに適しています。


4. cumall() の代替方法と比較

cumall() のような累積演算は、cumany()cumsum() などと組み合わせることで、さらに高度な解析が可能です。

  • cumany() は「累積的な OR 演算」を行い、一度 TRUE が出ると以降 TRUE になる。
  • cumsum() は累積和を計算するため、条件を満たした回数をカウントできる。
vec <- c(TRUE, FALSE, TRUE, TRUE)
cumany(vec) # [1]  TRUE FALSE  TRUE  TRUE
cumsum(vec) # [1]  1 1 2 3

cumall() と組み合わせることで、条件を満たす連続性の分析をより柔軟に行うことができます!!


5. まとめ

  • cumall() は「累積的な TRUE 判定」を行う関数で、データの連続性を評価するのに便利。
  • バイオインフォマティクスでは、遺伝子発現や変異データの解析で活用できる。
  • cumany()cumsum() との組み合わせで、より高度なデータ解析が可能。

tidyversedplyr を活用し、データ処理を効率化しながら、バイオインフォマティクスの解析を強化していきましょう〜!

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