如屏幕截图所示,如何将该表转换为单元格数组?

时间:2019-09-02 19:19:52

标签: matlab

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

Matlab不是我的语言,但是我只能测试用Matlab编写的功能,所以我真的不确定如何实现此任务。

Table

Cell 1

Cell 2

2 个答案:

答案 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

您可以按以下方式使用findgroupssplitapply

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

很显然,这与路易斯没有什么可比的,但可以完成工作。