如何在Matlab中将三个单元格数组组合成一个包含三列的矩阵/表格?

如何在Matlab中将三个单元格数组组合成一个包含三列的矩阵/表格?,matlab,Matlab,我的第一个数组名为removed是一个61 x 1数组,第二个数组名为keep是一个45 x 1数组,第三个数组名为deleted_rxns1是一个16 x 1数组 我正在使用 combo=vertcat(removed, kept, deleted_rxns1) 但是,这只是将它们合并到一个122 x 1阵列中。我需要三列,一列用于删除、保留和删除的\u rxns1 我还需要最好通过它们的公共行名来对齐它们,并在不发生这种情况的地方使用NA。保留的某些行名称与删除的行名称相同,而删除

我的第一个数组名为removed是一个61 x 1数组,第二个数组名为keep是一个45 x 1数组,第三个数组名为deleted_rxns1是一个16 x 1数组

我正在使用

    combo=vertcat(removed, kept, deleted_rxns1)
但是,这只是将它们合并到一个122 x 1阵列中。我需要三列,一列用于删除、保留和删除的\u rxns1

我还需要最好通过它们的公共行名来对齐它们,并在不发生这种情况的地方使用NA。保留的某些行名称与删除的行名称相同,而删除的\u rxns1的某些行名称与删除的行名称相同。如果最终输出可以是这样的话,那就很方便了

     Removed       Kept        Deleted
       NH3          NA            NH3
       CH4          CH4           NA
       02           02            NA
       C02          NA            CO2 
如果这是不可能的,我仍然希望有一个三列的矩阵。请问有人能帮忙吗


谢谢

由于阵列的大小不同,您无法将它们连接到二维矩阵中。 但是,您可以使用与您通过
单元
阵列请求的结构类似的结构:

c = {removed, kept, deleted_rxns1}; 
% c{1} == removed
% c{2} == kept
% c{3} == deleted_rxns1

至于您的第二个请求,您没有提供足够的信息来分类每一列中哪些行相互关联——因此,在您提供更多信息之前,我无法提供真正的帮助

以下是适用于您的玩具示例的代码:

clc;
clear;

% vectors
removed = cellstr(['NH3';'CH4';'O2';'CO2']);
kept = cellstr(['CH4';'O2']);
deleted = cellstr(['NH3';'CO2']);

% match vectors in cell array by columns
M = num2cell(NA*ones(4,3));
M(:,1) = removed;
M(find(ismember(M(:,1),kept)),2) = kept;
M(find(ismember(M(:,1),deleted)),3) = deleted;
然后你会得到

䠜M =
{
  [1,1] = NH3
  [2,1] = CH4
  [3,1] = O2
  [4,1] = CO2
  [1,2] =   NA
  [2,2] = CH4
  [3,2] = O2
  [4,2] =   NA
  [1,3] = NH3
  [2,3] =   NA
  [3,3] =   NA
  [4,3] = CO2
}
看起来像


我用倍频程运行了上面的代码,但我相信它在Matlab中也能工作。

谢谢你的回复。45x1阵列的45行(保留)对应于原始移除的阵列,而16x1阵列的16行(删除的)对应于原始移除的阵列。我需要手动检查每一行,以查看每一行中的哪一行对应于原始删除的行。我不太确定Matlab中是否会有一个自动函数,它会根据原始文档中出现的值相应地对齐每列中的值,并且不会将NA放在哪里,有点像我问题中的示例。