lecture
website icon
資料合併
資料檢視 命名編碼 新增變數 資料合併 資料篩選 遺漏值 資料加權
×
website icon 資料管理 統計分析 相關資源 巨人肩膀 語法索引 關於作者

簡介

本部分介紹如何合併資料,使用到的函數包含:

資料合併有三種情況,分別是合併變數、合併個案,以及兩個資料集的合併。

合併變數 / 欄合併

在原有的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