首页 > 解决方案 > 在matlab中转置数据块

问题描述

我已经为他的问题苦苦挣扎了很长时间,然后又回到了卓越,浪费了大量的时间和精力。我希望我可以在 Matlab 中解决这个问题,因为我有很多数据。我的仪器吐出数据如下:

TIME  PAR  ETS  
01:30  0     0  
01:30  40    300  
01:30  100   500
.  
01:30  1500 800  

下一次

02:30 0     0  
02:30 40    344  
02:30 100   653  
.  
.  
02:30  1500 1700  

所以每隔一小时左右我就会得到一个 PAR 与 ETS 曲线,但所有数据都堆叠在另一个下方,但我希望我有一个包含一个 PAR 列的文件,并且每个 ETS 列都堆叠在其旁边,时间为标题同样:

PAR   01:30   02:30  
   0      0       0  
  40      300     344  
  100     500     653
.  
.  
1500      800    1700  

我希望我很清楚。是否可以在 Matlab 中执行此操作,因为我是新手,但我想从某个地方开始。非常感谢。

标签: excelmatlabtranspose

解决方案


如果每个时间段的值PAR相同(如您的示例中所示)。然后你可以使用uniqueandtable/join来构建你的转置表。

首先用于unique从列中获取列名和time列的值PAR。例如

T = readtable('data.txt');
var_names = unique(T.TIME); 
row_values = unique(T.PAR);

接下来创建一个将PAR值作为第一列的基表

pivotTable = table(row_values,'VariableNames',{'PAR'});

现在,您可以遍历变量名称,join以将它们作为变量附加到基表中。该循环将具有以下元素

  1. 选择特定的行以为一组值time创建子表time
  2. 将表ETS列名称设置为当前time值。请注意,时间值如01:30不是有效的变量名。因此,您可以使用matlab.lang.makeValidName将这些值转换为表列的适当名称。
  3. 使用 join 将此子表附加到基表

这是一个如何工作的示例:

for v = var_names'
    selected_rows = strcmp(T.TIME,v{1});
    subTable = T(selected_rows,{'PAR', 'ETS'});
    subTable.Properties.VariableNames{2} =matlab.lang.makeValidName(v{1});        
    pivotTable = join(pivotTable,subTable);
end

推荐阅读