在Matlab中转置数据块

时间:2018-11-30 20:37:27

标签: excel matlab transpose

我一直在为他的问题苦苦挣扎,然后又恢复了卓越,浪费了大量的时间和精力。 我希望我可以在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中进行此操作,但我想从某个地方开始。 非常感谢。

1 个答案:

答案 0 :(得分:0)

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

首先使用uniquetime列中获取列名和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