R 関数 maxの位置・minの位置を求める

バイオインフォ道場、くまぞうです。

プログラミングを行う際、「知っているとすぐできるのに、知らないと全然できない」ということは良くあります。今回、「最大値・最小値の位置は?」という問題を考えてみたいと思います。

スポンサーリンク



最大値・最小値を求める

最大値・最小値を求めるのは簡単です。最大値を求めるにはmax関数、最小値を求めるにはmin関数を使います。これらは、プログラミング言語や表計算ソフトなどでもよく使われるので、関数名も似たようなものになっていて探しやすいです。

ベクターデータの最大値・最小値を求める

R>
x <- sample(100, 8)
x
[1] 72 47  1  7 78 50 37 42

max(x)
[1] 78

min(x)
[1] 1

データフレームの最大値・最小値を求める

R>
df <- data.frame(sample(100, 8), sample(10, 8))
df
  col1 col2
1   52    3
2    8    2
3    5    1
4   60    9
5   78    4
6    4    7
7    7    8
8   44    5

> max(df)
[1] 78

> min(df)
[1] 1

最大値・最小値の「位置」を求める

which関数を知っていれば、最大値・最小値の位置を求めるのは簡単です。しかし、プログラミング言語の中には、標準でこのような関数を提供していないものもあるので、存在を知らなければ探すのが難しいかもしれません。知らないものは探せません。実は、インデックスを取得する処理は、よく利用するので覚えておくと良いかもしれません。

x <- sample(100, 8)
x
[1] 72 47  1  7 78 50 37 42

max(x)
[1] 78

which.max(x) # 先頭から5番めが最大値(78)
[1] 5
which(x == max(x)) # 同様
[1] 5

min(x)
[1] 1

which.min(x) # 先頭から3番めが最小値(1)
[1] 3
which(x == min(x)) # 同様
[1] 3

もし、which関数を使わなければ自分で最大値がどれか?を1つずつ調べて、インデックスをチェックしていくというやり方で求めることができます。しかし、標準で提供されている関数の方が、効率的てバグもないでしょうから、そちらを優先的に使う方が良いと思います。

max.r

#! /usr/bin/Rscript

# 最大値を求める場合
x <- c(72, 47, 1, 7, 78, 50, 37, 42)

t <- 0 # 最大値の位置
j <- 0 # インデックス
for (i in seq(1,length(x))) {
    if (x[i]>t) {
      t <- x[i]
      j <- i
    }
}
print(j)
$ chmod +x max.r
$ ./max.r
[1] 5
スポンサーリンク





ピックアップ記事

  1. tidyverse – distinct関数でデータフレームの重複行を削除 dplyrパッケージ

    tidyverseでデータフレームの重複行の削除を行う場合、dplyrパッケージのdistinct…
  2. awk split サンプルでわかる列の分割とセパレータ(文字・正規表現)の指定方法

    awkのsplit関数は、セパレータを指定して文字列を分割することができます。セパレータには文字や…
  3. R plot 重ねる方法3パターン サンプルでわかるRの使い方

    Rでグラフ (plot) を重ねる方法は、「単純な追加」「図に重ねて描画」「濃淡で重なり表現」の3…

人気記事

  1. IGV, 解析ツール

    IGV 使い方 インストール〜便利な使い方まで | リファレンス・マッピングデータ・アノテーションを読み込んで表示しよう
    IGV(Integrative Genomics View…
  2. Excel, その他, 統計

    z-score 計算方法 エクセル(Excel) 編
    統計処理で、大きく変化しているなどの判断基準にも使われる値…
  3. R データ型 - 文字列・ベクター・データフレーム・マトリックス など-, R言語, スクリプト

    R subset関数 データフレームやmatrixからの条件指定による行・列の抽出
    R の subset関数は、データフレームやマトリックスか…

おすすめ記事

  1. awk, bash 文字列操作, シェルスクリプト

    bash 部分文字列・置換・長さ・連結・分割の文字列処理
    bashのよく使う文字列処理、部分文字列・置換・連結・長さ…
  2. R言語, グラフ

    R 使い方 軸・ラベルの調整(向き・サイズ・色など) グラフの描き方
    Rによるplot(グラフ)の描画は、手軽で大変便利です。た…
  3. bash 応用, シェルスクリプト

    シェル スクリプト ファイル存在チェック・空のファイルチェック
    bashでスクリプトを作成するときに、よく使うのがファイル…