在 R 中查詢向量的模式

Jinku Hu 2023年1月30日 2021年7月14日
  1. 使用自定義函式查詢 R 向量的眾數
  2. 使用 map_dblFindMode 函式應用於 R 中的每個資料框列
在 R 中查詢向量的模式

本文將解釋如何在 R 中找到向量的眾數的幾種方法。

使用自定義函式查詢 R 向量的眾數

眾數是最基本的統計概念之一,表示一組值中出現的最大值。因此,它可以在不同的資料型別中觀察到,例如數字或基於字元。R 語言沒有用於計算模式的內建函式,但我們可以使用函式來實現它:uniquewhich.maxtabulatematch。我們定義了一個名為 FindMode 的函式,它接受一個表示為 x 的引數。首先,在 x 上呼叫 unique 函式並儲存在一個單獨的物件中。unique 從集合中提取非重複值。它可以將向量物件、資料框或陣列作為第一個引數。

然後,我們有多個以 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_dblFindMode 函式應用於 R 中的每個資料框列

另一個用於查詢給定資料框每一列均值的有用函式是 map_dbl,它是 tidyverse 中包含的 purrr 包的一部分。請注意,不會在向量物件上呼叫這些方法。

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
Author: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn