資料合併有三種情況,分別是合併變數、合併個案,以及兩個資料集的合併。
合併變數 / 欄合併
在原有的wbc.csv檔案中,Team_Taiwan並沒有壘打數、長打率以及攻擊指數等資料。
> Team_Taiwan
PLAYER PS G H AB PA HR RBI BB SO SB OBP
1 鄭宗哲 IF 4 3 9 15 1 2 5 1 4 0.571
2 Fairchild OF 4 3 12 16 2 6 4 5 3 0.438
3 張育成 IF 4 6 15 16 1 5 1 2 0 0.438
4 林家正 C 4 1 7 10 0 0 1 1 0 0.400
5 陳傑憲 OF 2 0 1 3 0 0 1 0 0 0.667
6 陳晨威 OF 4 3 13 15 0 3 1 3 2 0.267
7 吉力吉撈 C 4 1 9 12 0 0 2 4 0 0.333
8 江坤宇 IF 4 2 12 14 0 2 1 2 1 0.231
9 吳念庭 IF 4 2 11 11 0 0 0 3 0 0.182
10 宋晟睿 OF 3 0 6 7 0 0 1 4 0 0.143
11 林安可 OF 4 1 15 15 0 0 0 4 0 0.067
12 蔣少宏 C 4 0 3 4 0 0 0 1 0 0.000
13 林子偉 IF 1 0 3 3 0 0 0 1 0 0.000
14 張政禹 IF 2 0 2 2 0 0 0 0 0 0.000
可以透過column combined縮寫的 cbind() 函數將上一部份計算出來的這三個打擊資料合併至Team_Taiwan當中:
> Team_Taiwan<-cbind(Team_Taiwan, TB, SLG, OPS) #將壘打數、長打率與攻擊指數與原資料合併
> Team_Taiwan
PLAYER PS G H AB PA HR RBI BB SO SB OBP TB SLG OPS
1 鄭宗哲 IF 4 3 9 15 1 2 5 1 4 0.571 6 0.667 1.238
2 Fairchild OF 4 3 12 16 2 6 4 5 3 0.438 9 0.750 1.188
3 張育成 IF 4 6 15 16 1 5 1 2 0 0.438 9 0.600 1.038
4 林家正 C 4 1 7 10 0 0 1 1 0 0.400 2 0.286 0.686
5 陳傑憲 OF 2 0 1 3 0 0 1 0 0 0.667 0 0.000 0.667
6 陳晨威 OF 4 3 13 15 0 3 1 3 2 0.267 4 0.308 0.575
7 吉力吉撈 C 4 1 9 12 0 0 2 4 0 0.333 1 0.111 0.444
8 江坤宇 IF 4 2 12 14 0 2 1 2 1 0.231 2 0.167 0.398
9 吳念庭 IF 4 2 11 11 0 0 0 3 0 0.182 2 0.182 0.364
10 宋晟睿 OF 3 0 6 7 0 0 1 4 0 0.143 0 0.000 0.143
11 林安可 OF 4 1 15 15 0 0 0 4 0 0.067 1 0.067 0.134
12 蔣少宏 C 4 0 3 4 0 0 0 1 0 0.000 0 0.000 0.000
13 林子偉 IF 1 0 3 3 0 0 0 1 0 0.000 0 0.000 0.000
14 張政禹 IF 2 0 2 2 0 0 0 0 0 0.000 0 0.000 0.000
合併個案 / 列合併
rbind() 也就是row combined的意思,適用於合併新增個案的情況。首先先將Team_Taiwan依據守備位置分割成捕手、內野手與外野手三個資料集,以便後續合併個案之用。關於資料篩選與分割的技巧,會於下一部份資料篩選進行介紹。
> Catcher<-Team_Taiwan[PS=="C",] #新增捕手資料集
> Infielder<-Team_Taiwan[PS=="IF",] #新增內野手資料集
> Outfielder<-Team_Taiwan[PS=="OF",] #新增外野手資料集
> Catcher
PLAYER PS G H AB PA HR RBI BB SO SB OBP TB SLG OPS
4 林家正 C 4 1 7 10 0 0 1 1 0 0.400 2 0.286 0.686
7 吉力吉撈 C 4 1 9 12 0 0 2 4 0 0.333 1 0.111 0.444
12 蔣少宏 C 4 0 3 4 0 0 0 1 0 0.000 0 0.000 0.000
> Infielder
PLAYER PS G H AB PA HR RBI BB SO SB OBP TB SLG OPS
1 鄭宗哲 IF 4 3 9 15 1 2 5 1 4 0.571 6 0.667 1.238
3 張育成 IF 4 6 15 16 1 5 1 2 0 0.438 9 0.600 1.038
8 江坤宇 IF 4 2 12 14 0 2 1 2 1 0.231 2 0.167 0.398
9 吳念庭 IF 4 2 11 11 0 0 0 3 0 0.182 2 0.182 0.364
13 林子偉 IF 1 0 3 3 0 0 0 1 0 0.000 0 0.000 0.000
14 張政禹 IF 2 0 2 2 0 0 0 0 0 0.000 0 0.000 0.000
> Outfielder
PLAYER PS G H AB PA HR RBI BB SO SB OBP TB SLG OPS
2 Fairchild OF 4 3 12 16 2 6 4 5 3 0.438 9 0.750 1.188
5 陳傑憲 OF 2 0 1 3 0 0 1 0 0 0.667 0 0.000 0.667
6 陳晨威 OF 4 3 13 15 0 3 1 3 2 0.267 4 0.308 0.575
10 宋晟睿 OF 3 0 6 7 0 0 1 4 0 0.143 0 0.000 0.143
11 林安可 OF 4 1 15 15 0 0 0 4 0 0.067 1 0.067 0.134
現在以 rbind() 函數將三個野手資料集進行個案合併,創造出一個新的Team_Taiwan_All資料集:
> Team_Taiwan_All<-rbind(Catcher, Infielder, Outfielder)
> Team_Taiwan_All
PLAYER PS G H AB PA HR RBI BB SO SB OBP TB SLG OPS
4 林家正 C 4 1 7 10 0 0 1 1 0 0.400 2 0.286 0.686
7 吉力吉撈 C 4 1 9 12 0 0 2 4 0 0.333 1 0.111 0.444
12 蔣少宏 C 4 0 3 4 0 0 0 1 0 0.000 0 0.000 0.000
1 鄭宗哲 IF 4 3 9 15 1 2 5 1 4 0.571 6 0.667 1.238
3 張育成 IF 4 6 15 16 1 5 1 2 0 0.438 9 0.600 1.038
8 江坤宇 IF 4 2 12 14 0 2 1 2 1 0.231 2 0.167 0.398
9 吳念庭 IF 4 2 11 11 0 0 0 3 0 0.182 2 0.182 0.364
13 林子偉 IF 1 0 3 3 0 0 0 1 0 0.000 0 0.000 0.000
14 張政禹 IF 2 0 2 2 0 0 0 0 0 0.000 0 0.000 0.000
2 Fairchild OF 4 3 12 16 2 6 4 5 3 0.438 9 0.750 1.188
5 陳傑憲 OF 2 0 1 3 0 0 1 0 0 0.667 0 0.000 0.667
6 陳晨威 OF 4 3 13 15 0 3 1 3 2 0.267 4 0.308 0.575
10 宋晟睿 OF 3 0 6 7 0 0 1 4 0 0.143 0 0.000 0.143
11 林安可 OF 4 1 15 15 0 0 0 4 0 0.067 1 0.067 0.134
檔案合併
所謂檔案合併顧名思義是指兩個資料集或檔案的合併。合併的前提是兩個資料集有共同變數作為合併基準點。因此在檔案合併之前,務必先確認有共同變數才有辦法使用 merge() 函數進行檔案合併。首先我們一樣先將Team_Taiwan分割成標準數據與進階數據兩個資料集,以便後續進行合併之用。其中,標準打擊數據包含了原始從PLAYER到OBP的12個變數;進階數據則包含PLAYER、TB、SLG與OPS。兩個資料集都有PLAYER變數作為合併的基準點。
> Standard<-Team_Taiwan[,1:12] #分割Team_Taiwan為標準數據
> Expanded<-Team_Taiwan[,c("PLAYER","TB","SLG","OPS")] #分割Team_Taiwan為進階數據
> Standard
PLAYER PS G H AB PA HR RBI BB SO SB OBP
1 鄭宗哲 IF 4 3 9 15 1 2 5 1 4 0.571
2 Fairchild OF 4 3 12 16 2 6 4 5 3 0.438
3 張育成 IF 4 6 15 16 1 5 1 2 0 0.438
4 林家正 C 4 1 7 10 0 0 1 1 0 0.400
5 陳傑憲 OF 2 0 1 3 0 0 1 0 0 0.667
6 陳晨威 OF 4 3 13 15 0 3 1 3 2 0.267
7 吉力吉撈 C 4 1 9 12 0 0 2 4 0 0.333
8 江坤宇 IF 4 2 12 14 0 2 1 2 1 0.231
9 吳念庭 IF 4 2 11 11 0 0 0 3 0 0.182
10 宋晟睿 OF 3 0 6 7 0 0 1 4 0 0.143
11 林安可 OF 4 1 15 15 0 0 0 4 0 0.067
12 蔣少宏 C 4 0 3 4 0 0 0 1 0 0.000
13 林子偉 IF 1 0 3 3 0 0 0 1 0 0.000
14 張政禹 IF 2 0 2 2 0 0 0 0 0 0.000
> Expanded
PLAYER TB SLG OPS
1 鄭宗哲 6 0.667 1.238
2 Fairchild 9 0.750 1.188
3 張育成 9 0.600 1.038
4 林家正 2 0.286 0.686
5 陳傑憲 0 0.000 0.667
6 陳晨威 4 0.308 0.575
7 吉力吉撈 1 0.111 0.444
8 江坤宇 2 0.167 0.398
9 吳念庭 2 0.182 0.364
10 宋晟睿 0 0.000 0.143
11 林安可 1 0.067 0.134
12 蔣少宏 0 0.000 0.000
13 林子偉 0 0.000 0.000
14 張政禹 0 0.000 0.000
現在嘗試用 merge() 來合併Standard與Expanded兩個資料集。可以見到合併完成的資料集以姓名筆劃進行排列。
> Team_Taiwan_Merge<-merge(Standard, Expanded, by="PLAYER") #以PLAYER為基準點合併兩個資料集
> Team_Taiwan_Merge
PLAYER PS G H AB PA HR RBI BB SO SB OBP TB SLG OPS
1 Fairchild OF 4 3 12 16 2 6 4 5 3 0.438 9 0.750 1.188
2 吉力吉撈 C 4 1 9 12 0 0 2 4 0 0.333 1 0.111 0.444
3 江坤宇 IF 4 2 12 14 0 2 1 2 1 0.231 2 0.167 0.398
4 吳念庭 IF 4 2 11 11 0 0 0 3 0 0.182 2 0.182 0.364
5 宋晟睿 OF 3 0 6 7 0 0 1 4 0 0.143 0 0.000 0.143
6 林子偉 IF 1 0 3 3 0 0 0 1 0 0.000 0 0.000 0.000
7 林安可 OF 4 1 15 15 0 0 0 4 0 0.067 1 0.067 0.134
8 林家正 C 4 1 7 10 0 0 1 1 0 0.400 2 0.286 0.686
9 張育成 IF 4 6 15 16 1 5 1 2 0 0.438 9 0.600 1.038
10 張政禹 IF 2 0 2 2 0 0 0 0 0 0.000 0 0.000 0.000
11 陳晨威 OF 4 3 13 15 0 3 1 3 2 0.267 4 0.308 0.575
12 陳傑憲 OF 2 0 1 3 0 0 1 0 0 0.667 0 0.000 0.667
13 蔣少宏 C 4 0 3 4 0 0 0 1 0 0.000 0 0.000 0.000
14 鄭宗哲 IF 4 3 9 15 1 2 5 1 4 0.571 6 0.667 1.238