我正在尝试转换从CSV文件导入的表(请参见下文)并将其转换为两个单元格数组。如屏幕截图所示,单元格1包含表的“度量”,相同ID的度量在同一单元格中。同样,单元格2以相同的方式包含“ t”。
Matlab不是我的语言,但是我只能测试用Matlab编写的功能,所以我真的不确定如何实现此任务。
答案 0 :(得分:1)
让数据定义为
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
您可以按以下方式使用findgroups
和splitapply
:
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
可以用unique
(第三输出)替换,单个数据变量的splitapply
可以用accumarray
替换:
[~, ~, g] = unique(data.id); % grouping variable
result_measure = accumarray(g, data.measure, [], @(x){x.'}).'; % split measure as per g
result_t = accumarray(g, data.t, [], @(x){x.'}).'; % split t as per g
答案 1 :(得分:1)
如果有人对我的非Matlab解决方案感兴趣:
// The example displays the following output:
// Original values of p1 and p2:
// p1 instance values:
// Name: Sam, Age: 42
// Value: 6565
// p2 instance values:
// Name: Sam, Age: 42
// Value: 6565
//
// Values of p1 and p2 after changes to p1:
// p1 instance values:
// Name: Frank, Age: 32
// Value: 7878
// p2 instance values:
// Name: Sam, Age: 42
// Value: 7878
//
// Values of p1 and p3 after changes to p1:
// p1 instance values:
// Name: George, Age: 39
// Value: 8641
// p3 instance values:
// Name: Frank, Age: 32
// Value: 7878
很显然,这与路易斯没有什么可比的,但可以完成工作。