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