如何在Matlab中将三个单元格数组组合成一个包含三列的矩阵/表格?
我的第一个数组名为removed是一个61 x 1数组,第二个数组名为keep是一个45 x 1数组,第三个数组名为deleted_rxns1是一个16 x 1数组 我正在使用如何在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。保留的某些行名称与删除的行名称相同,而删除
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放在哪里,有点像我问题中的示例。