編碼是統計分析的基礎工作,正確編碼有助降低人為誤差,提高分析準確率。這裡繼續用世界棒球經典賽wbc.csv當範例,來示範 R 如何替變數命名與編碼。
註解
變數命名有時候過於簡化,無法第一眼判斷變數的內容,可以利用 comment() 對變數或檔案下註解,提供更詳細的描述。
對class下註解:
> Team_Taiwan<-read.csv("c:/Users/USER/downloads/wbc.csv", header=T, sep=",")
> comment(Team_Taiwan)<-"2026世界棒球經典賽台灣隊名單"
> comment(Team_Taiwan)
[1] "2026世界棒球經典賽台灣隊名單"
對Team_Taiwan的變數新增註解:
> comment(Team_Taiwan$PLAYER)<-"球員"
> comment(Team_Taiwan$PS)<-"守備"
> comment(Team_Taiwan$G)<-"出賽"
> comment(Team_Taiwan$H)<-"安打"
> comment(Team_Taiwan$AB)<-"打數"
> comment(Team_Taiwan$PA)<-"打席"
> comment(Team_Taiwan$HR)<-"全壘打"
> comment(Team_Taiwan$RBI)<-"打點"
> comment(Team_Taiwan$BB)<-"保送"
> comment(Team_Taiwan$SO)<-"三振"
> comment(Team_Taiwan$SB)<-"盜壘"
> comment(Team_Taiwan$OBP)<-"上壘率"
註解新增完畢後,用 str() 函數查看可以發現 R 在每個變數的後面都附註了稍早新增的中文註解:
> str(Team_Taiwan)
'data.frame': 14 obs. of 12 variables:
$ PLAYER: chr "鄭宗哲" "Fairchild" "張育成" "林家正" ...
..- attr(*, "comment")= chr "球員"
$ PS : chr "IF" "OF" "IF" "C" ...
..- attr(*, "comment")= chr "守備"
$ G : int 4 4 4 4 2 4 4 4 4 3 ...
..- attr(*, "comment")= chr "出賽"
$ H : int 3 3 6 1 0 3 1 2 2 0 ...
..- attr(*, "comment")= chr "安打"
$ AB : int 9 12 15 7 1 13 9 12 11 6 ...
..- attr(*, "comment")= chr "打數"
$ PA : int 15 16 16 10 3 15 12 14 11 7 ...
..- attr(*, "comment")= chr "打席"
$ HR : int 1 2 1 0 0 0 0 0 0 0 ...
..- attr(*, "comment")= chr "全壘打"
$ RBI : int 2 6 5 0 0 3 0 2 0 0 ...
..- attr(*, "comment")= chr "打點"
$ BB : int 5 4 1 1 1 1 2 1 0 1 ...
..- attr(*, "comment")= chr "保送"
$ SO : int 1 5 2 1 0 3 4 2 3 4 ...
..- attr(*, "comment")= chr "三振"
$ SB : int 4 3 0 0 0 2 0 1 0 0 ...
..- attr(*, "comment")= chr "盜壘"
$ OBP : num 0.571 0.438 0.438 0.4 0.667 0.267 0.333 0.231 0.182 0.143 ...
..- attr(*, "comment")= chr "上壘率"
- attr(*, "comment")= chr "2026世界棒球經典賽台灣隊名單"
編碼
統計分析通常需要將字串類型的資料賦予「數字化」的代碼,也就是所謂的編碼。這項工作可以用 levels() 函數來完成。現在試著將守備位置PS編碼為捕手C=0、內野手IF=1;外野手OF=2:
> attach(Team_Taiwan)
> PS<-factor(PS) #將字串資料轉換為因子
> levels(PS)[levels(PS)=="C"]<-0
> levels(PS)[levels(PS)=="IF"]<-1
> levels(PS)[levels(PS)=="OF"]<-2
> table(PS)
PS
0 1 2
3 6 5
標籤
標籤是指賦予「數字化」後的變數可供辨識的名稱。透過 factor() 搭配 levels() 可以進行標籤化。現在試著將0、1、2編碼標籤化為Catcher、Infielder、Outfielder:
> PS<-factor(PS, levels=c(0,1,2), labels=c("Catcher","Infielder","Outfielder"))
> table(PS)
PS
Catcher Infielder Outfielder
3 6 5
如果變數的數值具有高低順序,例如安打數,也可以用ordered()搭配levels()賦予變數標籤名稱。例如把0-1支安打記為打擊低迷、2-4支安打記為打擊平穩、5支安打以上記為打擊火熱。
> H<-ordered(H, levels=c(3,3,6,1,0,3,1,2,2,0,1,0,0,0),
+ labels=c("平穩","平穩","火熱","低迷","低迷","平穩","低迷","平穩","平穩","低迷","低迷","低迷","低迷","低迷")
+ )
> table(H)
H
平穩 火熱 低迷
5 1 8