连接表MATLAB时保持类似的行

时间:2016-07-31 20:24:44

标签: matlab join rows matlab-table

我在MATLAB中遇到以下问题。

 f1  [4757*256] table
 f2  [4757*512] table
 f3  [14073*1024] table

虽然我可以轻松加入f1f2

 f1n = join(f1,f2,'Keys','RowNames');

我不能对

中的f1f3做同样的事情
 f3n = join(f1,f3,'Keys','RowNames');

我收到以下错误:

Both tables must have the same row names when using
them as the key.
Error in fuse_LL_GenreTag_features (line 33)
F3new  = join(f1,f3,'Keys','RowNames');

f3已将大多数行名称设为f1,但不一定全部。实际上,理想的做法是保留两个表中常见的行。你认为怎么做?

感谢您的反馈

1 个答案:

答案 0 :(得分:0)

只要第一个表行名称是第二个表的一个子集,您将获得一个包含公共行的新表。

From MATLAB docs

  

如果指定值'RowNames',则join使用A的行名和B的行名作为键。在这种情况下,A中的每一行都必须有一行。

考虑以下表格:

f1 = array2table(zeros(3,4),'RowNames',{'a','b','c'});
f2 = array2table(zeros(3,5),'RowNames',{'a','d','c'});
f3 = array2table(zeros(5,5),'RowNames',{'a','e','c','d','b'});

以下连接将起作用,因为第一个表是第二个表的子集:

f1n = join(f1,f3,'Keys','RowNames');
f2n = join(f2,f3,'Keys','RowNames'); 

然而这不起作用:

f1n = join(f3,f1,'Keys','RowNames');
f2n = join(f3,f2,'Keys','RowNames');

并将返回错误:“当使用它们作为键时,两个表必须具有相同的行名称。”

所以,在你的情况下,我认为翻转表的顺序应该有效:

f3n = join(f3,f1,'Keys','RowNames');