Matlab 如何将此表转换为屏幕截图中所示的单元格数组?
我正在尝试转换从CSV文件导入的表(见下文),并将其转换为两个单元格数组。如屏幕截图所示,单元格1包含表格的“度量值”,相同ID的度量值放在同一单元格中。同样,单元格2也以相同的方式包含“t” Matlab不是我的语言,但我有一个只用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], ...
将数据定义为
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很高兴我能帮上忙!