我在MATLAB中遇到以下问题。
f1 [4757*256] table
f2 [4757*512] table
f3 [14073*1024] table
而我可以很容易地将f1
和f2
与结合起来
f1n = join(f1,f2,'Keys','RowNames');
我不能对中的f1
、f3
做同样的操作
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
相同的大多数行名,但不一定全部。实际上,理想的做法是保留两个表中的公共行。在你看来,怎么能做到这一点?
感谢您的反馈
只要第一个表的行名是第二个表的子集,您就会得到一个具有公共行的新表。
来自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');