Matlab 如何将此表转换为屏幕截图中所示的单元格数组?

Matlab 如何将此表转换为屏幕截图中所示的单元格数组?,matlab,Matlab,我正在尝试转换从CSV文件导入的表(见下文),并将其转换为两个单元格数组。如屏幕截图所示,单元格1包含表格的“度量值”,相同ID的度量值放在同一单元格中。同样,单元格2也以相同的方式包含“t” Matlab不是我的语言,但我有一个只用Matlab编写的函数要测试,所以我真的不确定如何才能完成这个任务 将数据定义为 data = array2table([1 100 1; 1 200 2; 1 300 3; 2 500 3; 2 600 4; 2 700 5; 2 800 6], ...

我正在尝试转换从CSV文件导入的表(见下文),并将其转换为两个单元格数组。如屏幕截图所示,单元格1包含表格的“度量值”,相同ID的度量值放在同一单元格中。同样,单元格2也以相同的方式包含“t”

Matlab不是我的语言,但我有一个只用Matlab编写的函数要测试,所以我真的不确定如何才能完成这个任务


将数据定义为

data = array2table([1 100 1; 1 200 2; 1 300 3; 2 500 3; 2 600 4; 2 700 5; 2 800 6], ...
       'VariableNames', {'id' 'measure' 't'}); % example data
您可以按如下方式使用和:

g = findgroups(data.id); % grouping variable
result_measure = splitapply(@(x){x.'}, data.measure, g).'; % split measure as per g
result_t = splitapply(@(x){x.'}, data.t, g).'; % split t as per g
或者,单个分组变量的
findgroups
可以替换为(第三个输出),单个数据变量的
splitapply
可以替换为:


让数据定义为

data = array2table([1 100 1; 1 200 2; 1 300 3; 2 500 3; 2 600 4; 2 700 5; 2 800 6], ...
       'VariableNames', {'id' 'measure' 't'}); % example data
您可以按如下方式使用和:

g = findgroups(data.id); % grouping variable
result_measure = splitapply(@(x){x.'}, data.measure, g).'; % split measure as per g
result_t = splitapply(@(x){x.'}, data.t, g).'; % split t as per g
或者,单个分组变量的
findgroups
可以替换为(第三个输出),单个数据变量的
splitapply
可以替换为:


如果有人对我的非Matlab问题解决方案感兴趣:

array_id=table2array(data(:,'id'));
array_t=table2array(data(:,'t'));
array_measure=table2array(data(:,'measure'));
uni_id=unique(array_id);

t_cell=cell(1,length(uni_id));
measure_cell=cell(1,length(uni_id));

for i=1:length(uni_id)
    temp_t=table2array(data(data.id==uni_id(i),'t'));
    temp_measure=table2array(data(data.id==uni_id(i),'measure'));

    t_cell{i}=temp_t';
    measure_cell{i}=temp_measure';
end

显然,这与Luis所拥有的没有什么可比性,但它完成了任务。

如果有人对我的非Matlab问题解决方案感兴趣:

array_id=table2array(data(:,'id'));
array_t=table2array(data(:,'t'));
array_measure=table2array(data(:,'measure'));
uni_id=unique(array_id);

t_cell=cell(1,length(uni_id));
measure_cell=cell(1,length(uni_id));

for i=1:length(uni_id)
    temp_t=table2array(data(data.id==uni_id(i),'t'));
    temp_measure=table2array(data(data.id==uni_id(i),'measure'));

    t_cell{i}=temp_t';
    measure_cell{i}=temp_measure';
end

显然,这与路易斯所拥有的没有什么可比性,但它完成了任务。

这绝对是太棒了!非常感谢你,路易斯!您的解决方案简洁而优雅。实际上,我用另一种非Matlab的方式做到了这一点。我会把它贴在下面,以防人们好奇。@TerryCai很高兴我能帮上忙!这真是太棒了!非常感谢你,路易斯!您的解决方案简洁而优雅。实际上,我用另一种非Matlab的方式做到了这一点。我会把它贴在下面,以防人们好奇。@TerryCai很高兴我能帮上忙!