本篇介紹如何在 R 環境中,管理與操作各種資料,在實際進行分析之前,做一些前置性的準備動作。
在統計分析的過程中,我們時常會需要對資料進行一些前置處理,例如刪除或萃取部分資料、以及資料的排序等,這些動作也可以在匯入 R 之前,使用 Excel 這類的軟體來先進行處理,不過使用 Excel 來處理的話,每次選擇資料時就需要將資料重新匯入 R,處理步驟比較繁雜,另外如果資料量太大,可能也會無法使用 Excel 來處理,因此學習如何在 R 環境中進行基本的資料處理是有必要的。
許多初學者可能會認為在 R 環境中處理資料是很困難的事情,但是一旦學會了這些技巧之後,許多在 Excel 中很惱人的資料處理動作,也都可以在 R 中完成,甚至更快速而且更輕鬆。
首先將 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 ...
我們可以從這個輸出中看出來,Sample
、Year
、Month
、Location
與 Sex
都是整數(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 資料的方式,請繼續閱讀下一頁。