在 R 中查詢向量的模式
Jinku Hu
2023年1月30日
本文將解釋如何在 R 中找到向量的眾數的幾種方法。
使用自定義函式查詢 R 向量的眾數
眾數是最基本的統計概念之一,表示一組值中出現的最大值。因此,它可以在不同的資料型別中觀察到,例如數字或基於字元。R 語言沒有用於計算模式的內建函式,但我們可以使用函式來實現它:unique
、which.max
、tabulate
和 match
。我們定義了一個名為 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_dbl
將 FindMode
函式應用於 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