matlab函数merge_MATLAB数据合并方法
在数据处理当中,我们经常碰到数据集合并的需要。在一些语言如SAS,SQL中,数据集合并是一个非常简单的问题,但是在Matlab中,数据集合并则显得稍微复杂了一点。在Matlab中,要想合并数据,有两个办法,第一个办法就是使用dataset这种数据类型,这个statistic toolbox中的数据类型,专门为统计分析开发的。mat,cell,等数据类型转换成dataset数据类型可以查看 mat2
在数据处理当中,我们经常碰到数据集合并的需要。在一些语言如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
不合并关键变量(默认)
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)