2014-03-13 72 views
0

我有两个单元阵列。如何在Matlab中的单元格数组之间添加行?

A(290*6)B(300*6);

在两个阵列第一列是相同的。我使用'ismember'比较了两个单元格阵列的第一列。我想这样做;在单元格数组(A)中单元格元素缺失的地方,我必须添加一行元素丢失的地方。在Matlab中可能吗?

+3

这是一个有点模糊,请给模拟示例数据与A 3比1和B作为5乘1和你想要的确切输出(对于那些最小的模拟示例) – Dan

回答

0

将行插入现有矩阵或单元阵列并不容易;构建一个新的并且适当地填充它更容易。

查找的A的第一列的单元阵列B中的内容的位置:

[aa,bb] = ismember([A{:,1}],[B{:,1}]); 

创建新的空单元阵列:

C = cell(length(B),size(A,2)) 

填充它:

C(:,1)=B(:,1) 
C(bb,2:end) = A(aa,2:end); 

例如,给定此A(“3”行丢失)

[1] [3] 
[2] [5] 
[4] [3] 

而这个B:

[1] 
[2] 
[3] 
[4] 

这将返回:

[1] [3] 
[2] [5] 
[3]  [] 
[4] [3] 

,以填补前一行空的空间(这如果空行是不连续的和只会工作C的第一行是非空的):

n = setdiff(1:length(C),bb) 
C(n,2:end) = C(n-1,2:end); 
+0

非常感谢你许多。有效。我很高兴我的问题不完整。我可以使用空单元格上方的数据填充空单元格吗? Sry在这里发布问题带来的不便。 – user3248216

+0

非常感谢。有效。我很高兴我的问题不完整。我可以使用空单元格上方的数据填充空单元格吗? Sry在这里发布问题带来的不便。例如,显示空单元应由[5]替换。这可能吗? – user3248216

+0

请参阅编辑 - 尽管您可能需要根据空行的分布情况进行一些调整。 – nkjt

0

我想你可以直接使用第二个输出setdiff

[d,i] = setdiff(B(:,1),A(:,1)) 

i会告诉你,凡在该行是丢失。

相关问题