1

我在 MATLAB 中有以下问题。

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

虽然我可以很容易地加入f1f2

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

我不能对f1, f3in做同样的事情

 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但不一定全部。实际上,理想的做法是保留两个表中共有的行。您认为如何做到这一点?

感谢您的反馈

4

1 回答 1

0

只要第一个表的行名是第二个的子集,您就会得到一个包含公共行的新表。

来自 MATLAB 文档

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

考虑这些表:

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');
于 2016-07-31T21:51:38.660 回答