在 MATLAB 的元胞数组中定位共享相同字符串和其他元素的行

Locating rows which share same strings and other elements in a cell array in MATLAB

假设我在 MATLAB 中有一个以下类型的元胞数组:

Station_Name  Node_Number  Generation_type  Generated_Power (MW)

Barry              5        Gas             120  
Brigg              3        Nuclear         135
Brixton            1        Gas             110 
Shoreham           2        Solar           90 
Kelsey             5        Gas             85 
Jinnie             4        Nuclear         65
Pollock            2        Gas             150
Surret             2        Gas             160 

(实际问题包含更多的站、节点和生成类型,尽管我在这里写这个是为了简化)。

我想将数据排序为以下类型的数组:

Node_Number    Generation_type      Total_Generated_Power

1              Solar                 
1              Gas  
2              Hydro 
2              Gas
.
.
.
3        
4
5

所以我想创建一个脚本,它会自动为每个生成类型生成一个包含不同行的数组,为元胞数组的每个节点(实际上超过 5 个节点和超过 3 个生成类型) .

我最初的想法是我需要制作一个 for 循环,该循环将首先检查第二列中的相同元素,对于这些元素,将比较第三列中的字符串以查看哪些是相同的相同的。然后对于那些在同一节点共享相同发电类型的站点,它们产生的功率将被加在一起。然后需要创建一个新变量作为新数组,该数组将保存每个节点中每种类型的总发电量。

for 循环将从 1 初始化到最大节点数,并检查数组的每一行。根据我的理解,使用 strcmp 来查找共享相同字符串的站点,即相同的生成类型也应该被使用。

有关如何处理此问题的任何提示都将非常有帮助。预先感谢您的宝贵时间。

这应该可以解决问题:

% Sample data...
C = {
    'Barry'     5   'Gas'       120;
    'Brigg'     3   'Nuclear'   135;
    'Brixton'   1   'Gas'       110;
    'Shoreham'  2   'Solar'     90;
    'Kelsey'    5   'Gas'       85;
    'Jinnie'    4   'Nuclear'   65;
    'Pollock'   2   'Gas'       150;
    'Surret'    2   'Gas'       160
};

% Create a table from the cell matrix...
T = cell2table(C,'VariableNames',{'StationName' 'NodeNumber' 'GenerationType' 'GeneratedPower'});

% Generate a grouping for the table based on the 2nd and 3rd columns...
[G,NodeNumber,GenerationType] = findgroups(T.NodeNumber,T.GenerationType);

% Apply the sum function using a group-wise approach...
TotalGeneratedPower = splitapply(@sum,T.GeneratedPower,G);

% Create a new table with the result...
result = table(NodeNumber,GenerationType,TotalGeneratedPower);

% Sort the new table according to the first two columns...
result = sortrows(result,[1 1])

输出:

NodeNumber    GenerationType    TotalGeneratedPower
__________    ______________    ___________________

1             'Gas'             110                
2             'Gas'             310                
2             'Solar'            90                
3             'Nuclear'         135                
4             'Nuclear'          65                
5             'Gas'             205                

关于代码中使用的函数的更多信息,请参考Matlab官方文档的以下页面: