matlab函数merge_MATLAB数据合并方法
在數據處理當中,我們經常碰到數據集合并的需要。在一些語言如SAS,SQL中,數據集合并是一個非常簡單的問題,但是在Matlab中,數據集合并則顯得稍微復雜了一點。
在Matlab中,要想合并數據,有兩個辦法,第一個辦法就是使用dataset這種數據類型,這個statistic toolbox中的數據類型,專門為統計分析開發的。mat,cell,等數據類型轉換成dataset數據類型可以查看 mat2dataset,cell2dataset函數。當然,也可以直接定義dataset數據集。有了dataset數據類型,那么就可以使用join函數進行數據合并。還有另外一種辦法就是對于金融序列數據,可以使用Financial toolbox中的merge函數,前提是數據類型為金融時間序列對象。本文主要討論join函數如何合并數據。
[C,IA,IB]= join(A,B,param1,val1,param2,val2,...)
參數一Keys &&LeftKeys,RightKeys
在join這個函數中,首先要輸入的參數是Keys。這個一般為一個變量名,作為數據合并的標準。當Keys為變量名時,A,B中必須要都有這個變量。否則應該使用LeftKeys和RightKeys這兩個參數,LeftKeys指定A中某個變量作為合并依據,RightKeys指定B中某個變量作為合并依據 。請看下面的例子。a、b是一個dataset類型數據,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
現在我們想合并兩個數據集,以Key1作為合并依據,那么
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,那么怎么合并呢,應該使用使用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)
結果是
c =
Key1_Key2??? Var1
Var2
'a'?????????? 1????? 4
'b'?????????? 2????? 5
'e'????????? 11????? 7
參數二Type
Type參數描述的是我們合并的方式,是返回兩個數據中共有的部分,還是返回兩個數據集中所有的觀測值,或者返回某個數據集中的所有觀測值。Type共有四個參數值,inner,outer,leftouter,rightouter.
首先我們看一下Type參數值為inner時候的結果
cinner = join(a,b,'key','Key1','Type','inner','MergeKeys',true)
cinner =
Key1?? ????Var1??? Var2
'a'???????? 1????? 4
'b'???????? 2????? 5
'e'??????? 11????? 7
結果返回a,b中Key1都有的‘a’,’b’,’c’的觀測值。所以inner表示返回兩個數據集的共有部分。
再看一下Type為outer時候的結果
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這個值,但是結果中還是包含了這些觀測值。所以outer表示返回數據集的所有觀測值。
leftouter,與outer的區別在于leftouter表示,當A中有一個關鍵變量值而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這個參數值則和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
參數三MergeKeys
最后我們看一下MergeKeys這個參數,故名思議,這個參數表示是否合并關鍵變量。當MergeKeys為true時,結果只返回一個關鍵變量。當MergeKeys為false時,結果返回兩個關鍵變量,一個來自與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為返回的數據集,IA,IB分別為索引,A(IA,varName)對應著C中含有A數據集的元素。例如
[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
本文最后總結jion函數的參數用法如下表 。
Keys
一般為A,B中的變量名
關鍵變量,以該變量作為合并的標準。
LeftKeys
RightKeys
LeftKeys:A中的變量名
RightKeys:B中的變量名
指定A中的某變量和B中的某變量作為合并的關鍵變量。
Type
inner
以關鍵變量為依據,返回共有的部分
outer(fullouter)
以關鍵變量為依據,返回所有的觀測值。
rightouter
返回B中所有的觀測值
Leftouter
返回A中所有的觀測值
MergeKeys
true
合并關鍵變量
false
不合并關鍵變量(默認)
總結
以上是生活随笔為你收集整理的matlab函数merge_MATLAB数据合并方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小鸡手柄或其他手柄导致的电脑无法熄屏休眠
- 下一篇: matlab 海面反射,海面波浪模拟 M