将顺序行名称添加到使用for循环创建的表中

时间:2014-06-02 11:00:00

标签: matlab for-loop rowname

我编写了以下程序来创建表 combt 。我试图在这个表中添加行名,但没有运气。我想添加一个新列,其中包含行名称和要按顺序命名的每一行,即(['Row' num2str(j)])

%% Create tables.
combt = [];

%% Loop.
for i = [224:231, 271:281];
    j = sprintf('%04d', i)

%% Name the fit results sequentially.
comb.(['comb' j]) = cfit(fitresult);

%% Export combined variables to table.
combt = [combt;comb.(['comb' j])];

end

%% Name the columns.
final = dataset({combt 'a','b','c','d','wa','wb','wc','wd','xa','xb','xc','xd','y0','rsquare'});

当前表格如下:

The current table looks like this

我需要它看起来像这样(行名称可以通过(['Row' num2str(j)])实现):

I need it to look like this

3 个答案:

答案 0 :(得分:0)

如果您只是想用不同的名称初始化combt变量,那就这样做。

%% Loop.
for i = [224:231, 271:281];
    j = sprintf('%04d', i)

    %% Export combined variables to table.
    combt.(['comb' j])]=[];

end

如果您想为条目命名,请执行以下操作:

aaa=1:10;
for i=1:length(aaa)
    names{i}=['c',num2str(i)];
end
aaa_dataset = dataset(aaa','ObsNames',names)
在您的情况下

(确保每个条目都有一个名称):

final = dataset(combt,'ObsNames',{'a','b','c','d','wa','wb','wc','wd','xa','xb','xc','xd','y0','rsquare'});

如果您希望将名称添加到矩阵中:

a=rand(10,10);
for i=1:10
    names{i}=['c',num2str(i)];
end

a_cell=cell(size(a,1),size(a,2)+1);
a_cell(1:end,2:end)=num2cell(a);
a_cell(1:end,1)=names

答案 1 :(得分:0)

如果要将不同的数据格式保存到一个矩阵中,则应使用单元格。在您的情况下,创建一个新的data_array(您要保存它的位置):

my_old_size = size(my_old_data);
my_new_data= cell(my_old_size(1),my_old_size(2)+1);

然后将每个元素转换为str,cell或char。因为你不能将双重写入单元格并将其写入新的位置。

for k=1:my_old_size(1)
  for l=1:my_old_size(2)
    my_new_data(k,l+1)= {my_old_data(k,l)};
  end
end

最后但并非最不重要的是,您添加行名称。请注意,您应该在循环外定义Row-name的常量部分,否则strcat会将每个值添加到现有名称中:

my_rowname = 'Row_';
for k=1:my_old_size(1)
  my_new_matrix(k,1) = strcat(my_rowname,num2str(k));
end

这导致Row_1,Row_2,....,Row_(my_old_size)
如果您愿意,可以使用char(my_old_data(k,l)将数据转换为char而不是上面给出的字符串。你的rownames也一样。而不是num2str,您可以再次使用char()

我将行名称的定义和写入数据分开,以便更容易理解,但对于时间相关性,我会实现代码,因此您只需对数据进行一次循环。此外,如果您想再次处理数据,可以使用

my_new_matrix{m,n} 

获取该单元格内的参数。

答案 2 :(得分:0)

谢谢大家的帮助。我找到了一个非常简单的答案,它将在单独的列中添加顺序文件编号(我只需要添加row.(['row' j]) = [i , comb.(['comb' j])]并在'row'中取消另一个列名final = dataset({combt 'row', 'a','b','c','d','wa','wb','wc','wd','xa','xb','xc','xd','y0','rsquare'});)。

给予:

%% Create tables.
combt = [];

%% Loop.
for i = [224:231, 271:281];
    j = sprintf('%04d', i)

%% Name the fit results sequentially.
comb.(['comb' j]) = cfit(fitresult);

%% Add a column.
row.(['row' j]) = [i , comb.(['comb' j])]


%% Export combined variables to table.
combt = [combt;row.(['row' j])];

end

%% Name the columns.
final = dataset({combt 'row', 'a','b','c','d','wa','wb','wc','wd','xa','xb','xc','xd','y0','rsquare'});

产生下表:

enter image description here