本篇介紹如何在 R 環境中,管理與操作各種資料,在實際進行分析之前,做一些前置性的準備動作。

在統計分析的過程中,我們時常會需要對資料進行一些前置處理,例如刪除或萃取部分資料、以及資料的排序等,這些動作也可以在匯入 R 之前,使用 Excel 這類的軟體來先進行處理,不過使用 Excel 來處理的話,每次選擇資料時就需要將資料重新匯入 R,處理步驟比較繁雜,另外如果資料量太大,可能也會無法使用 Excel 來處理,因此學習如何在 R 環境中進行基本的資料處理是有必要的。


許多初學者可能會認為在 R 環境中處理資料是很困難的事情,但是一旦學會了這些技巧之後,許多在 Excel 中很惱人的資料處理動作,也都可以在 R 中完成,甚至更快速而且更輕鬆。

R 存取 Data Frame 的資料

首先將 squid.txt 這個檔案讀取進來:

setwd("C:/YOUR_PATH/")
Squid <- read.table(file = "squid.txt", header = TRUE)

由於大部份的 R 函數都是使用 data frame 來存取資料,所以一般建議是盡量使用 read.table 來讀取資料,而不要用 scan

將資料讀取進來之後,我們可以使用 names 來查看資料的欄位:

names(Squid)

輸出會像這樣:

[1] "Sample"   "Year"     "Month"    "Location" "Sex"      "GSI"

str 函數

str 函數(structure)可以顯示 data frame 中所有欄位的資訊:

str(Squid)

輸出為:

'data.frame':	2644 obs. of  6 variables:
 $ Sample  : int  1 2 3 4 5 6 7 8 9 10 ...
 $ Year    : int  1 1 1 1 1 1 1 1 1 1 ...
 $ Month   : int  1 1 1 1 1 1 1 1 1 2 ...
 $ Location: int  1 3 1 1 1 1 1 3 3 1 ...
 $ Sex     : int  2 2 2 2 2 2 2 2 2 2 ...
 $ GSI     : num  10.44 9.83 9.74 9.31 8.99 ...

我們可以從這個輸出中看出來,SampleYearMonthLocationSex 都是整數(int),而 GSI 則是數值(num)。假設我們不小心輸入錯誤指令:

Squid2 <- read.table(file = "squid.txt", dec = ",", header = TRUE)

雖然資料還是可以正常讀取進來,而且沒有錯誤訊息,但是用 str 檢查資料時,就會發現問題:

str(Squid2)

輸出為

'data.frame':	2644 obs. of  6 variables:
 $ Sample  : int  1 2 3 4 5 6 7 8 9 10 ...
 $ Year    : int  1 1 1 1 1 1 1 1 1 1 ...
 $ Month   : int  1 1 1 1 1 1 1 1 1 2 ...
 $ Location: int  1 3 1 1 1 1 1 3 3 1 ...
 $ Sex     : int  2 2 2 2 2 2 2 2 2 2 ...
 $ GSI     : Factor w/ 2472 levels "0.0064","0.007",..: 1533 2466 2462 2445 2428 2407 2379 2308 2288 2247 ...

這裡 GSI 變數現在被視為一個 factor,如果使用這樣的資料進行後續的分析時(例如畫 boxplot 或計算平均數),就會出現錯誤:

mean(Squid$GSI)
[1] 2.187034
mean(Squid2$GSI)
[1] NA
Warning message:
In mean.default(Squid2$GSI) :
  argument is not numeric or logical: returning NA

在使用 R 分析資料時,常常很容易發生類似的問題,所以建議在讀取資料之後,記得要使用 str 檢查一下資料是否正確。

這裡我們有興趣的變數是 GSI,接下來我們想要看看 GSI 與其他變數之間的關係,而在實際建立模型之前,通常會先畫一些簡單的圖(如 boxplot、dot plot、scatter plot 與 pair plot 等),大略看一下資料的狀況。

目前 GSI 是儲存在 Squid 這個 data frame 中,以下有幾種可以存取 data frame 資料的方式,請繼續閱讀下一頁。