資料合併有三種情況,分別是合併變數、合併個案,以及兩個資料集的合併。
合併變數 / 欄合併
例如在原有的class.RData檔案中,只有name、gender、height這三種變數。可以透過cbind()將weight合併至class當中:
> load(file="c:/Users/USER/downloads/class.RData")
> class
name gender height
1 Ariel F 168
2 Kevin M 188
3 Lewis M 182
4 Sarah F 156
5 George M 170
6 Linda F 158
7 Anne F 171
8 Emma F 160
9 Roger M 168
10 Bruce M 174
> weight<-c(51,85,75,44,60,47,56,53,64,69) #創造weight變數
> class_with_weight<-cbind(class,weight) #將weight變數與class資料合併,新的資料集取名為class_with_weight
> class_with_weight
name gender height weight
1 Ariel F 168 51
2 Kevin M 188 85
3 Lewis M 182 75
4 Sarah F 156 44
5 George M 170 60
6 Linda F 158 47
7 Anne F 171 56
8 Emma F 160 53
9 Roger M 168 64
10 Bruce M 174 69
合併個案 / 列合併
rbind()也就是row combined,適用於合併新增個案的情況。
為了實際示範rbind()指令,首先先將class_with_weight分為兩個檔案:
> student_female<-class_with_weight[class_with_weight$gender=="F",] #新增只有女生的檔案
> student_male<-class_with_weight[class_with_weight$gender=="M",] #新增只有男生的檔案
> student_female
name gender height weight
1 Ariel F 168 51
4 Sarah F 156 44
6 Linda F 158 47
7 Anne F 171 56
8 Emma F 160 53
> student_female
name gender height weight
2 Kevin M 188 85
3 Lewis M 182 75
5 George M 170 60
9 Roger M 168 64
10 Bruce M 174 69
將student_female與student_male合併為class_all:
> class_all<-rbind(student_female, student_male)
> class_all
name gender height weight
1 Ariel F 168 51
4 Sarah F 156 44
6 Linda F 158 47
7 Anne F 171 56
8 Emma F 160 53
2 Kevin M 188 85
3 Lewis M 182 75
5 George M 170 60
9 Roger M 168 64
10 Bruce M 174 69
資料合併
所謂資料合併是指兩個資料集或檔案的合併。要合併之前,必須先確認兩資料集有共同的變數,才有辦法使用merge()作合併。
以class與class_score為例,兩個資料集的共同變數是name:
> load(file="c:/Users/USER/downloads/class.RData")
> load(file="c:/Users/USER/downloads/class_score.RData")
> class
name gender height
1 Ariel F 168
2 Kevin M 188
3 Lewis M 182
4 Sarah F 156
5 George M 170
6 Linda F 158
7 Anne F 171
8 Emma F 160
9 Roger M 168
10 Bruce M 174
> class_score
name english math
1 Ariel 90 89
2 Kevin 96 90
3 Lewis 97 88
4 Sarah 89 93
5 George 77 64
6 Linda 61 48
7 Anne 81 60
8 Emma 73 82
9 Roger 86 85
10 Bruce 66 58
現在嘗試用merge()來合併class與class_score:
> class_new<-merge(class, class_score, by="name") #以name為基準點合併兩個資料
> class_new
name gender height english math
1 Anne F 171 81 60
2 Ariel F 168 90 89
3 Bruce M 174 66 58
4 Emma F 160 73 82
5 George M 170 77 64
6 Kevin M 188 96 90
7 Lewis M 182 97 88
8 Linda F 158 61 48
9 Roger M 168 86 85
10 Sarah F 156 89 93