我有两个单元阵列。如何在Matlab中的单元格数组之间添加行?
A(290*6)
和B(300*6);
在两个阵列第一列是相同的。我使用'ismember'比较了两个单元格阵列的第一列。我想这样做;在单元格数组(A)中单元格元素缺失的地方,我必须添加一行元素丢失的地方。在Matlab中可能吗?
我有两个单元阵列。如何在Matlab中的单元格数组之间添加行?
A(290*6)
和B(300*6);
在两个阵列第一列是相同的。我使用'ismember'比较了两个单元格阵列的第一列。我想这样做;在单元格数组(A)中单元格元素缺失的地方,我必须添加一行元素丢失的地方。在Matlab中可能吗?
将行插入现有矩阵或单元阵列并不容易;构建一个新的并且适当地填充它更容易。
查找的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);
非常感谢你许多。有效。我很高兴我的问题不完整。我可以使用空单元格上方的数据填充空单元格吗? Sry在这里发布问题带来的不便。 – user3248216
非常感谢。有效。我很高兴我的问题不完整。我可以使用空单元格上方的数据填充空单元格吗? Sry在这里发布问题带来的不便。例如,显示空单元应由[5]替换。这可能吗? – user3248216
请参阅编辑 - 尽管您可能需要根据空行的分布情况进行一些调整。 – nkjt
我想你可以直接使用第二个输出setdiff
[d,i] = setdiff(B(:,1),A(:,1))
i
会告诉你,凡在该行是丢失。
这是一个有点模糊,请给模拟示例数据与A 3比1和B作为5乘1和你想要的确切输出(对于那些最小的模拟示例) – Dan