R でベクトルのモードを見つける
この記事では、R でベクトルの最頻値を求める方法のいくつかの方法について説明します。
カスタム関数を使用して R ベクトルのモードを見つける
モードは、一連の値の最大発生値を示す最も基本的な統計概念の 1つです。その結果、数値や文字ベースなど、さまざまなデータ型で観察できます。R 言語にはモードを計算するための組み込み関数はありませんが、unique
、which.max
、tabulate
、および match
の関数を使用して実装できます。x
として示される 1つの引数を取る FindMode
という名前の関数を定義します。最初に、unique
関数が x
で呼び出され、別のオブジェクトに格納されます。unique
は、セットから重複しない値を抽出します。最初の引数として、ベクトルオブジェクト、データフレーム、または配列を使用できます。
次に、2つのベクトルを受け取り、それらから位置一致のベクトルを返す match
で始まる複数の連鎖関数があります。tabulate
関数は、各整数がベクトルに現れる回数をカウントして返します。返されるベクトルには、引数ベクトルの最大整数以下のすべての整数のカウントが含まれていることに注意してください。最後に、which.max
関数は整数ベクトルの最大要素のインデックスを見つけます。apply
関数を使用して、データフレームのすべての列で FindMode
関数を呼び出すことができます。この場合、データフレームとして格納された単純な整数ベクトルを宣言し、apply
関数に渡して平均を計算します。
library(purrr)
FindMode <- function(x) {
u <- unique(x)
u[which.max(tabulate(match(x, u)))]
}
x <- c(12, 44, 3, -4.2, 3, 3.2, 54, 4, -11, -8, 2.5)
df <- data.frame(x)
apply(df, 2, FindMode)
出力:
x
3
または、データフレームで FindMode
関数を直接呼び出すこともできます。次のサンプルコードは、datasets
パッケージに含まれている cars
データセットでの使用法を示しています。
library(purrr)
FindMode <- function(x) {
u <- unique(x)
u[which.max(tabulate(match(x, u)))]
}
apply(cars, 2, FindMode)
出力:
speed dist
20 26
map_dbl
を使用して、R の各データフレーム列に FindMode
関数を適用する
指定されたデータフレームの各列の平均を見つけるためのもう 1つの便利な関数は、tidyverse
に含まれる purrr
パッケージの一部である map_dbl
です。これらのメソッドは、ベクターオブジェクトでは呼び出されないことに注意してください。
library(purrr)
FindMode <- function(x) {
u <- unique(x)
u[which.max(tabulate(match(x, u)))]
}
x <- c(12, 44, 3, -4.2, 3, 3.2, 54, 4, -11, -8, 2.5)
df <- data.frame(x)
map_dbl(df, FindMode)
map_dbl(cars, FindMode)
出力:
x
3
speed dist
20 26