matlab函数merge_MATLAB数据合并方法
在數(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(chǎn)’,’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ù)用法如下表 。
Keys
一般為A,B中的變量名
關(guān)鍵變量,以該變量作為合并的標(biāo)準(zhǔn)。
LeftKeys
RightKeys
LeftKeys:A中的變量名
RightKeys:B中的變量名
指定A中的某變量和B中的某變量作為合并的關(guān)鍵變量。
Type
inner
以關(guān)鍵變量為依據(jù),返回共有的部分
outer(fullouter)
以關(guān)鍵變量為依據(jù),返回所有的觀測值。
rightouter
返回B中所有的觀測值
Leftouter
返回A中所有的觀測值
MergeKeys
true
合并關(guān)鍵變量
false
不合并關(guān)鍵變量(默認(rèn))
總結(jié)
以上是生活随笔為你收集整理的matlab函数merge_MATLAB数据合并方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小鸡手柄或其他手柄导致的电脑无法熄屏休眠
- 下一篇: 一个完整的项目管理流程包括什么?项目管理