MATLAB數(shù)據(jù)合并方法 - [MATLAB]
版權(quán)聲明:轉(zhuǎn)載時(shí)請以超鏈接形式標(biāo)明文章原始出處和作者信息及本聲明
在數(shù)據(jù)處理當(dāng)中,,我們經(jīng)常碰到數(shù)據(jù)集合并的需要。在一些語言如SAS,,SQL中,,數(shù)據(jù)集合并是一個(gè)非常簡單的問題,,但是在Matlab中,,數(shù)據(jù)集合并則顯得稍微復(fù)雜了一點(diǎn)。 在Matlab中,,要想合并數(shù)據(jù),有兩個(gè)辦法,,第一個(gè)辦法就是使用dataset這種數(shù)據(jù)類型,這個(gè)statistic toolbox中的數(shù)據(jù)類型,,專門為統(tǒng)計(jì)分析開發(fā)的。mat,cell,等數(shù)據(jù)類型轉(zhuǎn)換成dataset數(shù)據(jù)類型可以查看 mat2dataset,cell2dataset函數(shù),。當(dāng)然,也可以直接定義dataset數(shù)據(jù)集,。有了dataset數(shù)據(jù)類型,那么就可以使用join函數(shù)進(jìn)行數(shù)據(jù)合并,。還有另外一種辦法就是對于金融序列數(shù)據(jù),,可以使用Financial toolbox中的merge函數(shù),,前提是數(shù)據(jù)類型為金融時(shí)間序列對象。本文主要討論join函數(shù)如何合并數(shù)據(jù),。
[C,IA,IB]= join(A,B,param1,val1,param2,val2,...)
參數(shù)一 Keys &&LeftKeys,RightKeys 在join這個(gè)函數(shù)中,首先要輸入的參數(shù)是Keys 。這個(gè)一般為一個(gè)變量名,,作為數(shù)據(jù)合并的標(biāo)準(zhǔn)。當(dāng)Keys為變量名時(shí),,A,B中必須要都有這個(gè)變量,。否則應(yīng)該使用LeftKeys和RightKeys這兩個(gè)參數(shù),,LeftKeys指定A中某個(gè)變量作為合并依據(jù),,RightKeys指定B中某個(gè)變量作為合并依據(jù) 。請看下面的例子,。a、b是一個(gè)dataset類型數(shù)據(jù),,a包含了變量Key1,Var1;b包含了變量Key2,Var2; a = dataset({'a' 'b' 'c' 'e' 'h'}',[1 2 3 11 17]','VarNames',{'Key1' 'Var1'}) b = dataset({'a' 'b' 'd' 'e'}',[4 5 6 7]','VarNames',{'Key1' 'Var2'}) a = Key1 Var1 'a' 1 'b' 2 'c' 3 'e' 11 'h' 17 b = Key1 Var2 'a' 4 'b' 5 'd' 6 'e' 7 現(xiàn)在我們想合并兩個(gè)數(shù)據(jù)集,,以Key1作為合并依據(jù),,那么 c= join(a,b,'key','Key1','Type','inner','MergeKeys',true) c = Key1 Var1 Var2 'a' 1 4 'b' 2 5 'e' 11 7 但是當(dāng)a,b中的變量不同時(shí),,例如b中的Key1不叫Key1,而是叫Key2,那么怎么合并呢,,應(yīng)該使用使用LeftKeys和RightKeys代替Keys.舉個(gè)例子: a = dataset({'a' 'b' 'c' 'e' 'h'}',[1 2 3 11 17]','VarNames',{'Key1' 'Var1'}) b = dataset({'a' 'b' 'd' 'e'}',[4 5 6 7]', 'VarNames',{'Key2' 'Var2'}) %注意Key1變成了Key2 c= join(a,b,'LeftKeys','Key1','RightKeys','Key2','Type','inner','MergeKeys',true) 結(jié)果是 c = Key1_Key2 Var1 Var2 'a' 1 4 'b' 2 5 'e' 11 7 參數(shù)二 Type
Type參數(shù)描述的是我們合并的方式,是返回兩個(gè)數(shù)據(jù)中共有的部分,,還是返回兩個(gè)數(shù)據(jù)集中所有的觀測值,或者返回某個(gè)數(shù)據(jù)集中的所有觀測值,。Type共有四個(gè)參數(shù)值,,inner,outer,leftouter,rightouter.
首先我們看一下Type參數(shù)值為 inner時(shí)候的結(jié)果 cinner = join(a,b,'key','Key1','Type','inner','MergeKeys',true)
cinner =
Key1 Var1 Var2
'a' 1 4
'b' 2 5
'e' 11 7
結(jié)果返回a,b中Key1都有的‘a’,’b’,’c’的觀測值,。所以inner表示返回兩個(gè)數(shù)據(jù)集的共有部分。 再看一下Type為outer時(shí)候的結(jié)果 couter = Key1 Var1 Var2 'a' 1 4 'b' 2 5 'c' 3 NaN 'd' NaN 6 'e' 11 7 'h' 17 NaN
很顯然,a中Key1變量沒有 d這個(gè)值,,b中Key1沒有c,h這個(gè)值,但是結(jié)果中還是包含了這些觀測值,。所以outer表示返回?cái)?shù)據(jù)集的所有觀測值。 leftouter,,與outer的區(qū)別在于leftouter表示,當(dāng)A中有一個(gè)關(guān)鍵變量值而A中卻沒有的時(shí)候,,依然返回該觀測值,。例如 cleftouter = join(a,b,'key','Key1','Type','leftouter', 'MergeKeys',true) cleftouter = Key1 Var1 Var2 'a' 1 4 'b' 2 5 'c' 3 NaN 'e' 11 7 'h' 17 NaN 所以leftouter返回A中所有的觀測值,。 rightouter這個(gè)參數(shù)值則和leftouter這個(gè)相反,。
crightouter = join(a,b,'key','Key1','Type','rightouter', 'MergeKeys',true)
crightouter =
Key1 Var1 Var2 'a' 1 4 'b' 2 5 'd' NaN 6 'e' 11 7
參數(shù)三 MergeKeys 最后我們看一下 MergeKeys這個(gè)參數(shù),故名思議,,這個(gè)參數(shù)表示是否合并關(guān)鍵變量,。當(dāng)MergeKeys為true時(shí),,結(jié)果只返回一個(gè)關(guān)鍵變量。當(dāng)MergeKeys為false時(shí),,結(jié)果返回兩個(gè)關(guān)鍵變量,,一個(gè)來自與A,,一個(gè)來自與B. 讓我們看一下這個(gè)例子 couter = join(a,b,'key','Key1','Type','inner', 'MergeKeys',false) couter = Key1_left Var1 Key1_right Var2 'a' 1 'a' 4 'b' 2 'b' 5 'e' 11 'e' 7 couter = join(a,b,'key','Key1','Type','inner', 'MergeKeys',true) couter = Key1 Var1 Var2 'a' 1 4 'b' 2 5 'e' 11 7 輸出項(xiàng) [C IA IB] C為返回的數(shù)據(jù)集,,IA,IB分別為索引,A(IA,varName)對應(yīng)著C中含有A數(shù)據(jù)集的元素,。例如 [c,IA,IB]=join(a,b,'LeftKeys','Key1','RightKeys','Key2','Type','inner','MergeKeys',true) c = Key1_Key2 Var1 Var2 'a' 1 4 'b' 2 5 'e' 11 7 IA = 1 2 4 IB = 1 2 4 >> a(IA,:) ans = Key1 Var1 'a' 1 'b' 2 'e' 11 本文最后總結(jié)jion函數(shù)的參數(shù)用法如下表 ,。
|
|