R 使い方 データフレーム 累積和を求める
バイオインフォ道場、くまぞうです。
データフレームやmatrixで累積和を求める機会ありませんか?「前の行の値」に「現在の行の値」を繰り返し足していくことで求められますが、せっかく「R」を使っているのに、for文やインデックスを使って求めるのも残念な感じがします。そんなときは、累積和を求めるcumsumを使うと便利です。累積和は「ある位置までの和」ですが、他にも「ある位置までの最大値・最小値」などを求める関数もあるので知っておくと役に立つことがあるかもしれません。
目次
累積和を求める
累積和を求めるには、cumsum
を使います。使い方は簡単で、累積和を求めたいベクトルデータを渡せば、累積和のベクトルを返してくれます。
R> 1:10 [1] 1 2 3 4 5 6 7 8 9 10 R> cumsum(1:10) [1] 1 3 6 10 15 21 28 36 45 55
計算ではデータフレームを使うことが多いと思いますが、データフレームの場合も使い方は簡単です。累積和を求めたい列データを渡せば、結果が返ってきます。求めたデータは新しい列データとして使うことが多いと思うので、within
関数などと組み合わせて使うと大変便利です。
R> df <- data.frame(count=1:10) count 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 R> df <- within(df, cum_sum <- cumsum(count)) count cum_sum 1 1 1 2 2 3 3 3 6 4 4 10 5 5 15 6 6 21 7 7 28 8 8 36 9 9 45 10 10 55
ある部位までの最小値・最大値
ある部位までの最小値を求めるcummin
を使ってみました。ある部位までの最大値を求めたい場合は、cummax
で求めることができます。
R> df <- data.frame(number=sample(10)) number 1 4 2 6 3 3 4 9 5 10 6 8 7 7 8 5 9 1 10 2 R> df <- within(df, cum_min <- cummin(number)) number cum_min 1 4 4 2 6 4 3 3 3 4 9 3 5 10 3 6 8 3 7 7 3 8 5 3 9 1 1 10 2 1