我在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
,但不一定全部。实际上,理想的做法是保留两个表中常见的行。你认为怎么做?
感谢您的反馈
答案 0 :(得分:0)
只要第一个表行名称是第二个表的一个子集,您将获得一个包含公共行的新表。
如果指定值'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');