R - 平均數、中位數和眾數

Hello, 有志於學習R語言的程式設計師們!今天,我們將要進入R語言描述統計的世界。作為你們親切友善的鄰居計算機科學老師,我將指導你們了解平均數、中位數和眾數的概念。如果你從未寫過一行代碼也不用擔心——我們會從最基礎的知識開始,一起逐步學習。

R - Mean, Median & Mode

平均數

讓我們從平均數開始,這可能是最常見的集中趨勢度量。用簡單的話來說,就是我們常說的「平均值」。

基本平均數計算

在R中計算平均數,我們使用mean()函數。這裡有一個簡單的例子:

numbers <- c(10, 20, 30, 40, 50)
result <- mean(numbers)
print(result)

這將輸出:30

讓我們分解這一步驟:

  1. 我們使用c()函數創建一個名為numbers的向量。
  2. 我們使用mean()函數來計算這些數字的平均值。
  3. 我們將結果存儲在一個名為result的變量中。
  4. 最後,我們打印出結果。

處理NA值

現在,如果我們有缺失數據,在R中以NA表示,會發生什麼情況呢?讓我們看看:

numbers_with_na <- c(10, 20, NA, 40, 50)
result_with_na <- mean(numbers_with_na)
print(result_with_na)

這將輸出:NA

哦哦!R返回NA,因為它不知道如何處理缺失值。但別擔心,我們有解決方案!

使用NA選項

我們可以告訴R忽略NA值,使用na.rm選項:

numbers_with_na <- c(10, 20, NA, 40, 50)
result_na_removed <- mean(numbers_with_na, na.rm = TRUE)
print(result_na_removed)

這將輸出:30

好多了!通過設定na.rm = TRUE,我們告訴R在計算平均數之前移除NA值。

使用修剪選項

有時候,我們希望從平均數計算中排除極端值。這時trim選項就派上用場了。它允許我們在計算平均數之前,從數據兩端修剪一定百分比的值。

numbers <- c(1, 2, 3, 4, 5, 100)  # 注意異常值100
result_trimmed <- mean(numbers, trim = 0.1)
print(result_trimmed)

這將輸出一個接近3.5的值

通過設定trim = 0.1,我們從每端移除10%的數據,然後計算平均數。這有助於減少異常值的影响。

中位數

中位數是當數據集按從小到大的順序排列時的中间值。它受異常值的影响較平均數小。

numbers <- c(1, 3, 5, 7, 9, 11, 13)
result_median <- median(numbers)
print(result_median)

這將輸出:7

median()函數的工作原理與mean()類似。它還有一個na.rm選項用於處理NA值:

numbers_with_na <- c(1, 3, NA, 7, 9, 11, 13)
result_median_na <- median(numbers_with_na, na.rm = TRUE)
print(result_median_na)

這將輸出:8

眾數

有趣的是,R沒有內置的眾數(最頻繁的值)函數。但別擔心!我們可以創建自己的函數:

get_mode <- function(v) {
uniqv <- unique(v)
uniqv[which.max(tabulate(match(v, uniqv)))]
}

numbers <- c(1, 2, 2, 3, 3, 3, 4, 4, 5)
result_mode <- get_mode(numbers)
print(result_mode)

這將輸出:3

讓我們分解這個自定義函數:

  1. unique(v)獲取向量中的唯一值。
  2. match(v, uniqv)找到匹配的位置。
  3. tabulate()計算出現次數。
  4. which.max()找到最大計數的位置。
  5. 我們返回該位置的值。

函數總結

這裡有一個方便的表格,總結了我們學習的函數:

度量 函數 選項
平均數 mean() na.rm, trim
中位數 median() na.rm
眾數 自定義函數 N/A

記住,熟能生巧!嘗試在不同的數據集上使用這些函數,並探索改變選項如何影響結果。

當我們結束時,我想起了我學習R語言初期的故事。我曾經花了好幾個小時嘗試計算一個數據集的平均數,最後才發現我忘記移除NA值了。不要像我這樣——總是檢查你的數據,並在需要時使用na.rm = TRUE

快樂編程,願你在R的統計冒險中充滿洞見和驚喜時刻!

Credits: Image by storyset