matlab 在for循环中提取表

j13ufse2  于 2023-03-03  发布在  Matlab
关注(0)|答案(2)|浏览(308)

我试图运行一个for循环,在这个循环中,我试图提取一个表,在循环的每次迭代中。
目前我可以写一个表,如果我单步执行代码,我可以手动保存创建的表,然后再运行一次,它会被覆盖。我所需要的是,能够提取表并重命名它,然后在下一次循环中被覆盖。
我目前有以下代码:

clc 
clear all

%% Parameters

data = readtable('Input/Wales_Interim_23/Pembrokeshire_23_Finished.csv');

data.Unit = extractBefore( data.Reg_ID, '_' ); %Extract the unit number prior to the 
transect line.
gidx = findgroups( data.Unit ); %Identify the individual unit groups. 

N = max(gidx);         % gidx is [1,2,...,N] for N unique IDs.
units = cell(N,1);     % pre-allocate an output cell.

% Loop over the IDs and assign the subsets of data.
for ii = 1:N 
    units{ii} = data( gidx==ii, : );
    writetable(units{ii});
end

%Find the outputted tables in 'Units'.

这段代码基本上是通过一个CSV文件运行的,识别列表中的唯一组,然后将这些组分配给一个单元格数组。我不确定我需要在循环中的哪里放置一个“write table”函数,以及如何让脚本为每个唯一组导出一个表。

qco9c6ql

qco9c6ql1#

在对sprintf的调用中,可以包含索引的格式化运算符:

filename = sprintf('Profiles %d',ii);

这将为每个文件提供唯一的名称,并防止其被覆盖。

gxwragnw

gxwragnw2#

设法通过在循环开始时定义“unit_name”,然后在“writetable”函数的输出中使用此名称来对问题进行排序。

for ii = 1:N 
    unit_name = string(ii);
    units{ii} = data( gidx==ii, : );
    writetable(units{ii}, unit_name);
end

相关问题